【发布时间】:2015-11-08 03:01:19
【问题描述】:
我正在使用 asp.net 构建一个 web api,并且我正在使用 UnityContainer 来处理依赖项。
例如,我的授权控制器可以依赖授权服务:
class AuthController : ApiController {
private IAuthService authService;
public AuthController (IAuthService AuthService) {
this.authService = AuthService;
}
...
}
我的身份验证服务的实现可以依赖于我的用户存储库:
class AuthController : IAuthService {
private IUserRepository userRepository;
public AuthService (IUserRepository UserRepository) {
this.userRepository = UserRepository;
}
...
}
现在,我知道 unity 有两种处理依赖项的方式,它可以在每次需要时创建一个新的依赖项实例,或者它可以将依赖项的实例保存为单例并每次注入相同的单例依赖项是必需的。
默认情况下,unity 以第一种方式执行(每次都创建一个新实例)。
我的问题是:我应该保持这种方式,还是应该告诉 unity 将我的服务和存储库保持为单例?
当我的用户存储库依赖于其他一些依赖项并且该依赖项依赖于用户存储库时,我真的想到了这个问题。 当我尝试运行 web api 时,它会抛出一个堆栈溢出异常,我认为它这样做是因为它必须每次都创建用户存储库和另一个存储库的新实例。
谢谢你, 阿里克
【问题讨论】:
-
您的存储库可以作为单例运行吗?如果不知道您的存储库是如何实现的,就很难说。在尝试使其成为单例之前,我会解决循环依赖问题。
-
您希望每个请求都有一个新实例。
-
是的,首先修复你的循环依赖。我使用单例的唯一原因是跟踪我不想丢失的状态(例如:IsAuthenticated)。
标签: c# asp.net dependency-injection asp.net-web-api ioc-container