我们可以使用以下代码实例化MEF组合:
private void Compose()
{
DirectoryCatalog catalog = new DirectoryCatalog(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"), "*.dll");
CompositionContainer container = new CompositionContainer(catalog);
container.SatisfyImportsOnce(this);
}
这绝对没问题。 但需要在每个想要合成的类的构造函数中实例化。
如何在加载Web应用程序时仅对其进行一次实例化,并且适用于整个Web应用程序中的所有导入。
由于
答案 0 :(得分:1)
您可以编写一个静态帮助程序类来封装容器,并在首次使用时懒惰地初始化它,并在以后使用时返回已经实例化的容器。像这样:
public static class CompositionUtil
{
private static readonly Lazy<CompositionContainer> _container = new Lazy<CompositionContainer>(InitContainer);
private static CompositionContainer InitContainer()
{
DirectoryCatalog catalog = new DirectoryCatalog(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"), "*.dll");
return new CompositionContainer(catalog);
}
public static CompositionContainer Container
{
get { return _container.Value; }
}
}
它的用法看起来就像
CompositionUtil.Container.SatisfyImports(this);