首先:你们都很棒,我经常在这个网站上寻找MEF答案。
我的问题如下:
我有几个包含许多[Imports]的程序集和一个主应用程序,在那里进行组装。现在的问题是,这些导入项没有被“填充”,它们始终保持为空。
我已经尝试在一个简单的小项目中重现这种行为,并得出了以下源代码。
我是否对MEF有所误解?
请帮忙!谢谢大家!
接口程序集:
在主程序中,我通过以下方式组装整个Mef材料:
但是在此之后,以下类没有填充任何导入内容:
当我查看容器时,我发现IClass1和IClass2被组合在一起了。
为什么Class3中的[Import]没有得到满足?我想我完全错过了什么...
提前感谢大家的帮助!
Michael
我的问题如下:
我有几个包含许多[Imports]的程序集和一个主应用程序,在那里进行组装。现在的问题是,这些导入项没有被“填充”,它们始终保持为空。
我已经尝试在一个简单的小项目中重现这种行为,并得出了以下源代码。
我是否对MEF有所误解?
请帮忙!谢谢大家!
接口程序集:
namespace Interfaces
{
public interface IClass1
{
void Trigger();
}
public interface IClass2
{
void Trigger();
}
public interface IClass3
{
void Trigger();
}
}
汇编语言库1:
namespace Library1
{
[Export(typeof(IClass1))]
public class Class1:IClass1
{
#region IClass1 Members
public void Trigger()
{
}
#endregion
}
}
汇编库2:
namespace Library2
{
[Export(typeof(IClass2))]
public class Class2:IClass2
{
[Import]
public IClass1 Class1 { get; set; }
public void Trigger()
{
}
}
}
在主程序中,我通过以下方式组装整个Mef材料:
namespace MEFTest
{
public class mefStart
{
public CompositionContainer Container { get; private set; }
public void Start()
{
AggregateCatalog catalog = new AggregateCatalog();
AssemblyCatalog assemblyCatalog = new AssemblyCatalog(typeof(Program).Assembly);
DirectoryCatalog directoryCatalog = new DirectoryCatalog(".", "Library*.dll");
catalog.Catalogs.Add(directoryCatalog);
catalog.Catalogs.Add(assemblyCatalog);
this.Container = new CompositionContainer(catalog);
CompositionBatch batch = new CompositionBatch();
batch.AddExportedValue(this.Container);
this.Container.Compose(batch);
this.Container.ComposeParts(this);
}
}
}
但是在此之后,以下类没有填充任何导入内容:
namespace MEFTest
{
public class Class3:IClass3
{
[Import]
public IClass1 Class1 { get; set; }
[Import]
public IClass2 Class2 { get; set; }
public void Trigger()
{
Class1.Trigger();
Class2.Trigger();
}
}
}
当我查看容器时,我发现IClass1和IClass2被组合在一起了。
为什么Class3中的[Import]没有得到满足?我想我完全错过了什么...
提前感谢大家的帮助!
Michael
private IClass3 my3;
中。 - Jake Berger