编程语言
首页 > 编程语言> > c# – 如何使用VSTO和MEF解析ServiceLocator.Current为null

c# – 如何使用VSTO和MEF解析ServiceLocator.Current为null

作者:互联网

在VSTO项目中使用MEF并定义容器如下

        var catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));
        catalog.Catalogs.Add(...);

        container = new CompositionContainer(catalog);
        container.SatisfyImportsOnce(this);

除了代码使用的地方以外,所有人都使用各种库

 ServiceLocator.Current.GetInstance<MyInterface>()

哪个ofcourse抛出NullReferenceException

考虑到ServiceLocator是它自己的dll,想知道如何连接它甚至可能吗?

解决方法:

好的,你可以尝试这个,你定义你的容器:

var mefAdapter = new MefServiceLocatorAdapter(container);
ServiceLocator.SetLocatorProvider( () => mefAdapter);

MefServiceLocatorAdapter位于Microsoft.Practices.Prism.MefExtensions命名空间中.

**编辑:
但请记住,使用ServiceLocator被认为是一种反模式,并且违背了IoC / DI的目的.

标签:c,net,mef,prism,service-locator
来源: https://codeday.me/bug/20190630/1331544.html