我正在使用 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 时,它抛出堆栈溢出异常,我认为它这样做是因为它每次都必须创建用户存储库和其他存储库的新实例。
谢谢你,
阿里克
您可能想要为每个 HttpRequest 创建一组新的实例。如果某个实例中缓存了某些内容,这可以防止出现一些意外的副作用,从而扰乱某些逻辑。如果您将其范围限制在 HttpRequest 级别,并且您的依赖链依赖于某个存储库 4 次不同的时间,那么它们都将共享该存储库的同一实例。
以下是在 Unity 中执行此操作的方法:MVC、EF - Unity 中的 DataContext 单例实例 Per-Web-Request https://stackoverflow.com/questions/5187562/mvc-ef-datacontext-singleton-instance-per-web-request-in-unity
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)