Я использую 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 мог передать мой экземпляр.
Есть предложения? Спасибо.