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模块的潜在影响是什么?

Autofac.Web:同时配置PropertyInjection和attributedinject的影响

如果你有两个模块,它们都将运行,并且都将完成它们的注入工作。

这里的问题是AttributedInjectionModule有更多的限制——它只在你明确告诉它的地方注入——而PropertyInjectionModule有更多的覆盖范围——它总是注入。两者都有会导致失去对属性的控制,因为PropertyInjectionModule无论如何都会注入所有东西。

你也可能遇到一些依赖类型被实例化两次的问题——在管道中注入的每个模块实例化一次。

如果你删除PropertyInjectionModule,那么只有属性的东西会被注入,你将保留更细粒度的控制

相关文章:
  • 没有找到相关文章