2014-10-07 68 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")); 

你會得到類型之外沒有找到。