Синглтон службы WCF с использованием MEF - PullRequest
0 голосов
/ 08 февраля 2019

У нас есть консольное приложение, в котором размещены все наши службы WCF с использованием класса ServiceHost.

Чтобы иметь возможность использовать 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?

...