在aspx.cs文件中,Assembly.GetExecutingAssembly找不到MEF导出零件

问题描述

在我的网站项目中,我在“ App_Code”目录中创建了2个MEF类。它们已导出:

[Export(typeof(ITools))]
public class Tools : ITools
{
   ...
}

[Export(typeof(ICommandQueue))]
public class CommandQueue : ICommandQueue
{
   ...
}

在项目的根目录中,我想在Default.aspx页中使用这些部分。所以我导入了它们:

    [Import]
    public ITools Tools { get; set; }

    [Import]
    public ICommandQueue CommandQueue { get; set; }

组成它们。

代码无效:

var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
container.ComposeParts(this);

当我检查目录变量的内容时,我看到“零件”:Count = 0。 然后 container.ComposeParts(this)抛出System.ComponentModel.Composition.ChangeRejectedException :

System.ComponentModel.Composition.ChangeRejectedException was unhandled by user code
  Message=La composition reste inchangée. Les modifications ont été rejetées en raison des erreurs suivantes : La composition a produit plusieurs erreurs de composition,avec 2 causes initiales. Ces causes initiales sont fournies ci-après. Pour plus d'@R_51_4045@ions,passez en revue la propriété CompositionException.Errors.

1) Aucune exportation correspondant à la contrainte 
    ContractName    ITools
    requiredTypeIdentity    ITools n'a été trouvée.

Résultat : Impossible de définir l'importation '_Default.Tools (ContractName="ITools")' sur le composant 'ASP.default_aspx'.
Élément : _Default.Tools (ContractName="ITools") -->  ASP.default_aspx

2) Aucune exportation correspondant à la contrainte 
    ContractName    ICommandQueue
    requiredTypeIdentity    ICommandQueue n'a été trouvée.

Résultat : Impossible de définir l'importation '_Default.CommandQueue (ContractName="ICommandQueue")' sur le composant 'ASP.default_aspx'.
Élément : _Default.CommandQueue (ContractName="ICommandQueue") -->  ASP.default_aspx

我更改了目录设置,此代码有效:

var catalog = new TypeCatalog(typeof(Tools),typeof(CommandQueue));

我不明白为什么自动发现在第一种情况下不起作用,这是组成零件的最简单方法

一个主意?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)