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