【发布时间】:2016-12-10 02:32:56
【问题描述】:
注册表:
container.Register<IAuthenticationHandler, AuthenticationHandler>(Lifestyle.Transient);
container.Register<IUserHandler, UserHandler>(Lifestyle.Transient);
第 1 类:
public UserHandler(IAuthenticationHandler authenticationHandler)
{
_authenticationHandler = authenticationHandler;
}
第 2 类:
public AuthenticationHandler(IUserHandler userHandler)
{
_userHandler = userHandler;
}
我了解循环问题是什么。当 UserHandler 初始化时,它正在注入 AuthenticationHandler 实现,然后尝试创建 UserHandler 实例,循环开始......
我的问题是如何在(简单注射器)这种情况以及我需要像这样注射的其他情况下解决这个问题?
谢谢!
更新:
function AddUser(User user){ // User Handler
_authenticationHandler.GenerateRandomSalt();
string hashedPassword = _authenticationHandler.HashPassword(user.Password.HashedPassword, salt);
}
function Authenticate(string username, string password){ // Authentication Handler
_userHandler.GetUserByUsername(username?.Trim());
}
基本上我需要在AuthenticationHandler中调用UserHandler来获取用户并验证是否有用户。
我需要调用 UserHandler 中的 AuthenticationHandler 来获取对密码进行加盐和哈希处理的函数。
我想我可以调用存储库来获取用户,但我不应该通过服务处理程序,以防在用户服务中完成更多事情
【问题讨论】:
-
需要更多示例来展示如何打破循环。我可以肯定地说的一个提示是,您选择的 DI 容器在这里并不重要。
标签: c# .net dependency-injection simple-injector