Добавить в службу WCF REST - PullRequest
3 голосов
/ 12 января 2011

Я использую шаблон WCF REST, где сервисы реализованы только с помощью класса и зарегистрированы в Global.ascx (во многом как контроллеры MVC).

RouteTable.Routes.Add(new ServiceRoute("Games/Games", new WebServiceHostFactory(), typeof(Games.Games)));

В Games.Games есть ctor, принимающий Dal.Games.IGames, и у меня есть NinjectModule с готовыми привязками, но я не могу до конца жизни выяснить, куда передать ядро, чтобы оно могло контролировать создание службы классы.

Мои сервисы не имеют файла разметки (svc), поэтому я предполагаю, что он будет чем-то связан с заменой WebServiceHostFactory на один из Ninject. Мне удалось найти его в расширении Ninject Web, но я просто уронил его, ничего не изменив, не говоря уже о том, что я нигде не могу найти место для установки кена в этом классе.

Любые решения, советы или подсказки приветствуются.

1 Ответ

4 голосов
/ 21 января 2011

Позвольте мне предвосхитить это, сказав, что кто-то, кто действительно знает внутреннюю работу 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 придет и предоставит реальное решение.

...