我正在使用MEF Composition Container的构造函数注入,我想知道如何让CompositionContainer将自己注入到他提供的对象的实例上。
答案 0 :(得分:2)
您可以使用CompositionContainer.ComposeExportedValue方法之一从给定对象创建零件。
以下是一个示例:
class Program
{
static void Main(string[] args)
{
var container = new CompositionContainer(new ApplicationCatalog());
Console.WriteLine("Main: container [{0}]", container.GetHashCode());
container.ComposeExportedValue<CompositionContainer>(container);
var exp = container.GetExportedValue<ExportThatNeedsContainer>();
Console.ReadKey();
}
}
[Export]
public class ExportThatNeedsContainer
{
[ImportingConstructor]
public ExportThatNeedsContainer(CompositionContainer cc)
{
Console.WriteLine("ExportThatNeedsContainer: cc [{0}]", cc.GetHashCode());
}
}
这样可行,但据我所知,将容器注入某个部件并不是MEF的“正常”用例。
答案 1 :(得分:0)
我不确定它是否可行。想象一下,你有一个包含三个类的容器,其中一个也包含容器本身,它包含三个类。它将是一个stackoverflow:)