簡體   English   中英

具有導入基數的Autofac異常

[英]Autofac exception with Import Cardinality

我在MVC網站中使用帶有MEF的Autofac。 基本上,我已經為網站編寫了插件系統。 插件位於文件夾中,我創建了DirectoryCatalog並向Autofac注冊。

我創建了另一個項目作為我的插件並對其進行了測試。

一切正常。 我已經很好地導入了控制器,並且可以導航到插件中的MVC區域。

當我添加第二個插件時(基本相同,只是命名/命名空間不同),Autofac會引發有關基數的錯誤。

'exports' cannot contain more than one element when ImportDefinition.ImportCardinality is ImportCardinality.ZeroOrOne or ImportCardinality.ExactlyOne. Parameter name: exports

我已經檢查了DirectoryCatalog,所有導出都顯示在那里。 而且我可以很好地導航到主機中的控制器,但是當我導航至插件的控制器時,會出現錯誤。 如果我刪除其中一個插件,則一切正常。

任何幫助是極大的贊賞。

嘗試從輸出文件夾(用於創建DirectoryCatalog的文件夾)中刪除所有內容。

僅在使用Autofac.Integration.Mef時有效。

我們遇到了同樣的問題,在重命名項目后簽出時,基本上所有開發人員都遇到了此錯誤,解決方案始終相同:只需刪除輸出文件夾。

這是正在發生的事情:

創建DirectoryCatalog時,Mef會在輸出文件夾中搜索所有.dll文件。 但是輸出文件夾中可能包含舊的,不需要的.dll文件,因為重建解決方案時不會刪除文件,而是會替換文件,因此,如果將程序集從OldName.dll重命名為NewName.dll,輸出文件夾將包含兩個文件,而不只是一個文件,如果兩個dll具有相同的導出,Mef可能會崩潰。

這實際上是正常的,並且按預期方式工作,最大的問題是Autofac.Integration.Mef拋出了奇怪的錯誤消息。 Mef會拋出更好的錯誤消息。

剛遇到同樣的錯誤。 清除我的輸出文件夾並不能解決問題。

原來我的問題出在插件中的Autofac注冊中。

我有重復的.Exported條目類似於以下內容:

builder.RegisterType<FileStreamFactory>()
            .As<IFileStreamFactory>()
            .Exported(x => x.As<IFileStreamFactory>());
builder.RegisterType<XmlWriterFactory>()
            .As<IXmlWriterFactory>()
            .Exported(x => x.As<IFileStreamFactory>());

因此,請確保檢查所有的Autofac注冊是否重復。 我的是因為某種不良的復制癌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM