繁体   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