我正在使用mef创建WCF Web服务。这是服务的样子:如何告诉MEF重新创建对象?
[Export]
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MobileService
{
[Import]
public IEmailService EmailService { get; set; }
[Import]
public ILoggerService LoggerService { get; set; }
[Import]
public IContextManager ContextManager { get; set; }
这是怎样的代码中检索服务实例如下:
// Get Service instace via MEF
public object GetInstance(InstanceContext instanceContext, Message message)
{
var lazyInstance = Container.GetExports(ServiceType, null, null).FirstOrDefault();
var instance = lazyInstance.Value;
return instance;
}
MEF创建EmailService,LoggerService这是否精细,他们快乐地生活,同时使用寿命。
现在,ContextManager是不同的动物。在GetInstance中 - 我真的很喜欢“杀死”它并重新创建。 ContextManager在构造期间研究URL和标题并填充“上下文”。像我这样的代码 - 它是第一次创建,永远不会被破坏。如何改变这种行为?
谢谢!
这是ContextManager他有问题,其他两个都很好。 –
@Chirs - 是的,你是对的。我已经修改了我的答案。 –
请注意,如果您导入Lazy之类的东西,那么无论CreationPolicy Nonshared还是Shared,都会因为Lazy <>而始终获得相同的实例。想象一下[ImportMany]和元数据的情况 –
blindmeis