Позвольте мне предвосхитить это, сказав, что кто-то, кто действительно знает внутреннюю работу Ninject, мог бы предложить гораздо более чистое решение. Я боролся с той же проблемой, о которой ты упоминал.
В основном методом проб и ошибок, я определил, что если вы сделаете следующие изменения кода в библиотеке Ninject.Extensions.Wcf, Ninject сработает в ваших классах обслуживания.
В NinjectServiceHostFactory.cs я изменил базовый класс и передал тип .Get
public class NinjectServiceHostFactory : WebServiceHostFactory //<-- Changed base class
{
protected override ServiceHost CreateServiceHost( Type serviceType, Uri[] baseAddresses )
{
var serviceTypeParameter = new ConstructorArgument( "serviceType", serviceType );
var baseAddressesParameter = new ConstructorArgument( "baseAddresses", baseAddresses );
return KernelContainer.Kernel.Get<NinjectServiceHost>( serviceTypeParameter, baseAddressesParameter );
}
}
В NinjectServiceHost.cs я изменил базовый класс на WebServiceHost.
Кроме того, я добавил эту ссылку на оба:
using System.ServiceModel.Web;
Я уверен, что это решение нарушает это расширение для других типов служб WCF, так что, надеюсь, гуру Ninject придет и предоставит реальное решение.