Autofac - 通过配置从特定文件夹注册程序集

时间:2014-10-07 11:27:26

标签: c# autofac

我在配置中通过autofac注册我的程序集。 我想要来自另一个文件夹的autofac加载程序集,没有'bin'文件夹。

我尝试将asssembly的'type'属性路径设置为:

<component type="Amazon.SQS.AmazonSQSClient, amazonDlls/AWSSDK" service="Amazon.SQS.IAmazonSQS, AWSSDK" />

但是我收到了无效的程序集名称错误。

我该怎么办 - 从特定文件夹注册程序集?

顺便说一句:我知道可以从代码中获取,但我想从config。

2 个答案:

答案 0 :(得分:0)

无法在完全限定类型名称中提供程序集的路径。似乎甚至不可能从不在&#34; bin&#34;之外的不同目录中的库中注册类型。夹。即使您在与dll相同的文件夹中准备配置文件,也要注册并以这种方式阅读:

builder.RegisterModule(new ConfigurationSettinsgReader("<section-name>", "amazonDlls/app.config"));

您将获得未找到类型的例外。

答案 1 :(得分:0)

the documentation所述,组件类型的名称为fully-qualified type names,这是.NET规范定义的格式。完全限定的类型名称不包含路径。

使用开箱即用的配置格式无法指定路径。你有几个选择。

选项1:添加探测路径

默认情况下,.NET仅在应用程序的bin文件夹中搜索程序集。您可以阅读how .NET locates assemblies on MSDN

.NET允许您指定通过app.configweb.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>

These paths must be subdirectories of the bin folder因此可能不适合你。

如果它必须在bin文件夹之外(而不是在子目录下)you can use the <codeBase> element to specify a URL location。如果你这样做,看起来装配必须有一个强名称,所以请记住这一点。 probingPath机制不需要强名称。

当然,在GAC之外和bin文件夹之外的指定位置加载程序集存在固有的风险。需要考虑的事情。

选项2:创建自己的配置阅读器

这将会困难得多。您可以grab the Autofac.Configuration source创建自己的配置阅读器版本,其中包括文件位置支持。您可能需要查看Assembly.LoadFrom才能使其发挥作用,但同样,还有一些风险。 Assembly.LoadFrom docs概述了问题。