我在试图弄清楚如何解决我的架构中的依赖问题时遇到了麻烦。我正在使用 NHibernate,我试图用我自己的 ICriteriaItem 接口抽象它的 ICriteria 接口。ICriteriaItem 在我的存储库接口中使用:
ICriteriaItem.cs
public interface ICriteriaItem
{
string PropertyName { get; set; }
object Value { get; set; }
}
IUserRepository.cs
public interface IUserRepository
{
IEnumerable<User> Find(IList<ICriteriaItem> criteria);
}
我的服务层在其 AccountService 中使用此存储库
AccountService.cs
public class AccountService : IAccountService
{
private IUserRepository _userRepo;
private IRoleRepository _roleRepo;
public AccountService(IUserRepository userRepository,
IRoleRepository roleRepository)
{
_userRepo = userRepository;
_roleRepo = roleRepository;
}
public ValidateUser(string username, string password)
{
password = HashPassword(password);
_userRepo.Find(new List<ICriteriaItem>() {
new CriteriaItem() { "Username", username },
new CriteriaItem() { "Password", password},
});
}
}
我的问题是使用 Ninject 获取 CriteriaItem 的实例。我所有的绑定都在我的 MVC 层中完成,目前,我的服务层对 Ninject 一无所知。我的服务已经注入到构造函数中。所以这是我的选择:
我可以将 ICriteriaItem 注入到构造函数中。这感觉很脏,因为每个服务都会注入这个。我确信我可以使用基本存储库来做到这一点,但它仍然感觉很脏。
注入我的内核并在我的服务中使用它来获取 ICriteriaItem 的实例。感觉更糟。
只需公开 ICriteriaItem 的具体类并取消接口即可。
找别的方法...
想法?我在这一切都错了吗?有没有更好的办法?我在这里想念什么?