我正在使用 Unity 容器在 ASP.NET MVC 4 应用程序中进行依赖项注入(inject)。
对于特定 Controller (例如 ProductController),我有一个依赖项注入(inject)场景,如下所示:
- ProductController 构造函数采用 IProductsRepository 实例。
- IProductsRepository 实现有一个接受 IProductsService 实例的构造函数。
- IProductsService 实现有一个接受身份验证 token 字符串的构造函数,该字符串是从 Web 请求中的 Cookie 中检索的。
考虑到身份验证 token cookie 只能在创建 Controller 实例后才能检索,在这种情况下执行自动依赖项注入(inject)的正确方法是什么?
最佳答案
如果需要延迟创建ProductService
你可以
- 为该服务注入(inject)自定义工厂
- 让 DI 容器自动生成类型为
Func<IProductService>
的委托(delegate)工厂并将该委托(delegate)注入(inject)到您的 Controller 中 - 让容器生成lazy proxy这对消费者隐藏了服务的延迟创建
我更喜欢第三种选择,因为它对于 IProductService
的消费者来说是完全透明的
关于asp.net-mvc - 使用Unity动态注入(inject)构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12797314/