[英]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.