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

时间:2020-08-25 12:25:30

标签: c# asp.net 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'informations, 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));

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

一个主意?

0 个答案:

没有答案