C# 有关PartCreationPolicy.Any和ServiceLocator.GetInstance()的MEF短问题
我只是想知道我想做的事情是否可行,因为我在网上找不到任何关于它的信息 假设我得到了一个用PartCreationPolicy(CreationPolicy.Any)导出的类。 如果要使用ServiceLocator.Instance.GetInstance()导入它,我可以在哪里指定要使用哪个CreationPolicy导入它?(如果是共享或非共享) 只是在任何地方都找不到关于它的任何信息C# 有关PartCreationPolicy.Any和ServiceLocator.GetInstance()的MEF短问题,c#,.net,wpf,prism,mef,C#,.net,Wpf,Prism,Mef,我只是想知道我想做的事情是否可行,因为我在网上找不到任何关于它的信息 假设我得到了一个用PartCreationPolicy(CreationPolicy.Any)导出的类。 如果要使用ServiceLocator.Instance.GetInstance()导入它,我可以在哪里指定要使用哪个CreationPolicy导入它?(如果是共享或非共享) 只是在任何地方都找不到关于它的任何信息 谢谢 据我所知,这不能通过通用服务定位器来指定 默认情况下,CreationPolicy。任何都将被视为“
谢谢 据我所知,这不能通过通用服务定位器来指定 默认情况下,
CreationPolicy。任何
都将被视为“共享”。要获取“非共享”实例,您需要:
- 将零件上的创建策略更改为
;或者CreationPolicy.NonShared
- 使用MEF
方法;或者CompositionContainer.GetExports(ImportDefinition)
- 创建一个使用
导入的部件,并从导出工厂
请求该部件(请参见下文。需要MEF 2或Silverlight 4-在.NET 4.0 RTM MEF中不可用。)ServiceLocator
[Export]
public class ExportFactoryProvider<T>
{
[Import]
public ExportFactory<T> Factory { get; set; }
}
不可否认,这最终看起来有点粗糙。我认为造成这种尴尬的原因是,当请求服务时,很少(没有?)其他IoC容器支持指定类似
CreationPolicy
的内容。谢谢Nicholas!回答得好!
var serviceFactory =
ServiceLocator.Instance.GetService<ExportFactoryProvider<IService>>();
using (var service1 = serviceFactory.Factory.CreateExport())
{
DoSomething(service1.Value);
}