Как я могу использовать расширение Ninject WCF с одноэлементным сервисом? - PullRequest
2 голосов
/ 15 июля 2011

Я использую Ninject 2.2.1.4 и Ninject.Extensions.Wcf 2.2.0.4.

Мой сервис украшен следующим атрибутом:

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

Используя вышеуказанный атрибут, я получаю сообщение об ошибке:

"Указанный тип службы не может быть загружен как служба, поскольку у него нет конструктора по умолчанию (без параметров). Чтобы устранить проблему, добавьте конструктор по умолчанию в тип или передайте экземпляр типа в хозяин. "

Если я удаляю атрибут, Ninject работает как положено.

После некоторого исследования я понимаю, что поскольку служба помечена как одноэлементная, она будет автоматически создана с помощью конструктора без параметров в ServiceHost, отсюда и сообщение об ошибке. Чтобы решить эту проблему, я должен сам создать объект службы, разрешить его с помощью ninject, а затем передать этот одноэлементный объект в ServiceHost для использования. Я не уверен, как это сделать.

Я посмотрел на источник расширения WCF и увидел, что NinjectServiceHost наследуется от ServiceHost, поэтому я думал связать NinjectServiceHost с моим экземпляром объекта службы с помощью перегруженного конструктора:

 public NinjectServiceHost( object singletonInstance )
        : base( singletonInstance )
    {
    }

Я не уверен, правильно ли это, и если да, то как и где правильно связать его, чтобы ServiceHost мог передать мой экземпляр.

Есть предложения? Спасибо.

1 Ответ

1 голос
/ 15 июля 2011

Если вы можете жить с бета-версией, я предлагаю обновить ее до 2.3.x. Он поддерживает одноэлементные службы IIS. Смотрите также примеры на github

...