在 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>()
这当然会引发 NullReferenceException
考虑到 ServiceLocator 在它自己的 dll 中,想知道如何连接它或者甚至可能吗?
最佳答案
好的,你可以试试这个,你定义你的容器:
var mefAdapter = new MefServiceLocatorAdapter(container);
ServiceLocator.SetLocatorProvider( () => mefAdapter);
MefServiceLocatorAdapter 位于 Microsoft.Practices.Prism.MefExtensions 命名空间中。
** 编辑:
但请记住,使用 ServiceLocator 被认为是一种反模式,违背了 IoC/DI 的目的。
关于c# - 如何使用 VSTO 和 MEF 解决 ServiceLocator.Current 为 null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12550297/