Autofac.Web:同时配置PropertyInjection和attributedinject的影响
本文关键字:attributedinject 影响 PropertyInjection 配置 Web Autofac | 更新日期: 2023-09-27 18:01:55
我继承了一些旧的ASP。. NET Webforms代码使用Autofac内核包Autofac.Web
。我注意到配置定义了 PropertyInjection
模块和AttributedInjection
模块——这与这里明确声明的文档相矛盾:
首先,从您的web中删除
PropertyInjectionModule
。并将其替换为AttributedInjectionModule
但是web中的自动条目。配置如下(在httpModules
中有类似的设置):
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="ContainerDisposal" ... etc .../>
<!-- Should next line be removed? -->
<add name="PropertyInjection" ... etc .../>
<add name="AttributedInjection" ... etc .../>
</modules>
</system.webServer>
应用程序中的页面通常使用[InjectUnsetProperties]
属性。
在大多数情况下,应用程序似乎可以工作—但是有一些奇怪的问题,可能与有关。按照文档更改配置显然需要大量的重新测试工作——不用说,在这个旧代码中自动化测试并不广泛。
我没有在Webforms中使用Autofac的经验——谁能解释一下上述错误配置的影响,如果有的话,它可能会导致什么问题?同样,相反地,移除PropertyInjection
模块的潜在影响是什么?
如果你有两个模块,它们都将运行,并且都将完成它们的注入工作。
这里的问题是AttributedInjectionModule
有更多的限制——它只在你明确告诉它的地方注入——而PropertyInjectionModule
有更多的覆盖范围——它总是注入。两者都有会导致失去对属性的控制,因为PropertyInjectionModule
无论如何都会注入所有东西。
你也可能遇到一些依赖类型被实例化两次的问题——在管道中注入的每个模块实例化一次。
如果你删除PropertyInjectionModule
,那么只有属性的东西会被注入,你将保留更细粒度的控制