使用MEF的WCF服务单例

时间:2019-02-08 08:26:28

标签: wcf mef

我们有一个控制台应用程序,它使用ServiceHost类托管我们的所有WCF服务。

为了能够使用MEF,我们有一个IInstanceProvider实现,用于引导MEF合成容器。使用IContractBehaviorAttribute将该实例提供程序分配给服务。

public class MefBehaviorAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute
{
    void IContractBehavior.ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
    {
        dispatchRuntime.InstanceProvider = new MefInstanceProvider(contractDescription.ContractType);
    }
    ...
}

到目前为止,一切正常。

对于特定的服务实现,我想应用一个ServiceBehavior属性,将其InstanceContextMode设置为“单一”,以使服务成为单例。

[Export(typeof(IService))]
[MefBehavior]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class Service : ServiceBase, IService, IDisposable
{
    [Import]
    private IImportedClass instance;
    ...

现在的问题是,ServiceHost实例化后立即创建了服务实例。到那时,合同行为尚未分配,因此尚未执行,这导致组合错误,因为组合容器尚未自举。

创建可以使用MEF的单例服务实例的正确方法是什么?

0 个答案:

没有答案