2014-10-07 50 views
0

我在配置中通过autofac注册我的程序集。 我想从另一个文件夹,不'bin'文件夹的autofac加载程序集。Autofac - 通过配置从特定文件夹注册程序集

我尝试把它“类型”属性asssembly的路径是这样的:

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

,但我得到无效的程序集名称的错误。

我该怎么做 - 从特定文件夹注册程序集?顺便说一下:我知道这是可能的代码,但我想从配置。

回答

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概述了这些问题。

+0

感谢您的回复。我尝试第一个选项,但我仍然得到相同的错误:'类型'x,x'找不到。它可能需要组装资格,例如\“MyType,MyAssembly \”' – Shira 2014-10-19 11:24:36

+0

您是否更改了配置?程序集限定的类型名称中没有斜杠,但示例组件类型的确如此。尝试修复类型名称以确认.NET格式。请参阅我的答案中的文档链接。如果你确实改变了你的配置,你能否更新你的问题? – 2014-10-19 16:15:00

0

无法在完全限定类型名称中提供组件的路径。似乎甚至不可能从不在“bin”文件夹以外的库中注册类型。即使你的DLL要注册并阅读这样的文件夹准备的配置文件:

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

你会得到类型之外没有找到。