我碰到了一個試圖設置DI的小路障。如何使用Ninject將服務層添加到我的UnitOfWork?
所以因爲我有這個控制器:
public UsersController(IUnitOfWork unitOfWork)
{
// Stuff
}
我以前有直接訪問我的版本庫,這個實現的UnitOfWork。
public class UnitOfWork : IUnitOfWork, IDisposable
{
private readonly DbContext _context = new DbContext();
public IRepository<User> Users { get { return new UserRepository(_context); } }
}
Ninject的UnitOfWork代碼:Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
現在,這實際上是正常工作。不過,我想改變它,以便代替包含存儲庫的UnitOfWork,它包含接收多個存儲庫的服務。
public class UserService : IUserService
{
private readonly IUserRepository _userRepository;
public UserService(IUserRepository userRepository, /* Other repositories */)
{
_userRepository = userRepository;
}
}
現在唯一的解決辦法我能想出是
public class UnitOfWork : IUnitOfWork, IDisposable
{
private readonly DbContext _context = new DbContext();
public IUserService UserService
{
get
{
return new UserService(new UserRepository(_context), /* etc. */);
}
}
}
這看起來不正確。現在我自己創建所有的服務依賴關係。
我在StackOverflow上看過帖子,提到最好讓服務訪問多個存儲庫並處理業務邏輯,而不是讓控制器(MVC應用程序)擔心它。
雖然沒有找到關於如何正確實際執行此操作的任何細節。那麼我怎麼能用Ninject來做我以後的事情呢?
相關:http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why/10588594#10588594 – 2013-04-05 23:11:31