我在尝试设置 DI 时遇到了一个小障碍。
所以鉴于我有这个控制器:
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 来做我所追求的呢?