gpt4 book ai didi

wcf - 如何告诉 MEF 重新创建对象?

转载 作者:行者123 更新时间:2023-12-01 10:09:25 25 4
gpt4 key购买 nike

我正在使用 mef 创建 WCF 网络服务。这是服务的样子:

[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 和 header 并填充“上下文”。使用像我这样的代码 - 它是第一次创建并且永远不会被破坏。如何改变这种行为?

谢谢!

最佳答案

在导出 IContextManager 的实现时,您需要使用非共享部分创建策略来标记导出。例如:

[Export(typeof(IContextManager)]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ContextManager : IContextManager
{
...
}

这将通知 MEF 它应该在每次满足导入时创建一个新的导出实例。默认情况下,MEF 使用 CreationPolicy.Shared,它将仅创建一个导出值(单例),这可能是您想要用于电子邮件和日志记录实现的内容。

关于wcf - 如何告诉 MEF 重新创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7102699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com