我有一个Repository,Interface,Controller ....看起来像这样..
public interface IUserRepositories
{
bool CreateUser(User newUser);
bool CheckUniqueEmail(string Email);
bool CheckUserLoginDetails(string email, string password);
}
User Repository
=============
which is implementing all the methods ..
1) CreateUSer
2) CheckLoginDetails
3) CheckUniqueEmail
private IUserRepositories _userRepo;
public UserController() : this(new UserRepositories())
{
}
public UserController(IUserRepositories userRepo)
{
this._userRepo = userRepo;
}
这看起来不错......如果是的话......通过这种方式我可以获得什么好处......
请解释......过去3个小时的混乱......
...谢谢
答案 0 :(得分:1)
这看起来不错
几乎。你所拥有的通常被称为poor man's DI。正确的方法如下(注意默认构造函数已被删除):
private IUserRepositories _userRepo;
public UserController(IUserRepositories userRepo)
{
this._userRepo = userRepo;
}
通过使用控制反转来获得的好处是,您的控制器与存储库的弱耦合使得更容易单独进行单元测试,并使应用程序的不同层更加可重用和可维护。
通过删除默认构造函数,您清楚地向给定类的使用者指示此类所依赖并且需要一个必须实现给定合同(接口)的存储库。这使您的代码可以清楚地自动将其自身记录给消费者。