我在ASP.NET MVC 4应用程序中使用Unity容器进行依赖项注入。
对于特定的控制器(比如ProductController),我有一个依赖注入场景如下:
在这种情况下进行自动依赖注入的正确方法是什么,考虑到只能在创建控制器实例后检索身份验证令牌cookie?
答案 0 :(得分:1)
如果您需要延迟创建ProductService
,您可以
Func<IProductService>
的委托工厂,并将该委托注入您的控制器我更喜欢第三种选择,因为它对IProductService
答案 1 :(得分:0)
我认为你有两个选择:
1使用container.Resolve()并在参数可用时传递参数。
所以,不要在IProductsService
的构造函数中询问ProductsRepository
,而是执行以下操作:
IProductsService anInstance = container.Resolve<IProductsService>(new ParameterOverride("authenticationTokenString", "myValue"));
这称为ParameterOverride。可以在此处找到MSDN文档:Resolving Objects by Using Overrides
2不是传递普通的身份验证令牌字符串,而是将其封装在接口后面并传递它。您的IProductsService
会占用IAuthenticationTokenProvider
,并会要求该课程提供所需的令牌。您的实现将在创建后访问所需的对象以获取正确的值。
我会选择第二种选择。它将使您的设计更加清晰,让Unity无需任何手动工作即可处理所有依赖注入。