在我的网站项目中,我在“ 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));
我不明白为什么自动发现在第一种情况下不起作用,这是组成零件的最简单方法。
一个主意?