Autofac-通过配置从特定文件夹注册程序集
本文关键字:文件夹 注册 程序集 配置 Autofac- | 更新日期: 2023-09-27 18:25:51
我在配置中通过autofac注册程序集。我想要从另一个文件夹中自动加载程序集,而不是"bin"文件夹。
我试着把它的"类型"属性路径像这样组装:
<component type="Amazon.SQS.AmazonSQSClient, amazonDlls/AWSSDK" service="Amazon.SQS.IAmazonSQS, AWSSDK" />
但我得到了无效程序集名称的错误。
如何从特定文件夹注册程序集?
顺便说一句:我从代码中知道这是可能的,但我想从配置中知道。
不可能以完全限定的类型名称提供程序集的路径。似乎甚至不可能从不位于"bin"文件夹不同目录的库中注册类型。即使您在与dll相同的文件夹中准备配置文件,也要以这种方式注册和读取:
builder.RegisterModule(new ConfigurationSettinsgReader("<section-name>", "amazonDlls/app.config"));
您将得到未找到类型的异常。
如文档中所述,组件类型的名称是完全限定的类型名称,这是.NET规范定义的格式。完全限定的类型名称不包括路径。
使用现成的配置格式无法指定路径。你有几个选择。
选项1:添加探测路径
默认情况下,.NET仅在应用程序的bin文件夹中搜索程序集。您可以阅读有关.NET如何在MSDN 上定位程序集的信息
.NET允许您通过app.config
或web.config
:指定其他搜索路径
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin'plugins" />
</assemblyBinding>
</runtime>
<configuration>
这些路径必须是bin文件夹的子目录,这样可能不适用于您。
如果它必须在bin文件夹之外(而不是在子目录中),则可以使用<codeBase>
元素来指定URL位置。如果这样做,程序集似乎必须有一个强名称,所以请记住这一点。probingPath
机制不需要强名称。
当然,加载位于GAC外部和bin文件夹外部指定位置的程序集也存在固有风险。需要考虑的事情。
选项2:创建自己的配置读取器
这将更加困难。您可以获取Autofac.Configuration源,并创建自己版本的配置读取器,其中包括文件位置支持。您可能需要查看Assembly.LoadFrom才能使其发挥作用,但是,同样,这样做也有一些风险。Assembly.LoadFrom文档概述了这些问题。