3

WebServiceHost で Ninject を使用する適切な方法は何ですか (IIS でホストする場合)

.svc ファイルがなく、不要であることに注意してください。だから私は拡張子のないURLを持っています。サービスにレポなどを注入するために Ninject を使用しています。それが機能している間、以前の方法を思い出せず、現在の方法は間違っています-実際には自己ホスト型のように機能しています-サービスが IIS パイプラインに参加する必要があります (同じポートを使用し、アプリケーションプール)...

App_Start フォルダーに NinectWebCommon.cs を作成した Ninject.Extensions.WCF への参照を追加しました。その中で、次のようにサービスを配線しています(ただし、URL/ポートを指定したくないので、適切なライフサイクルに参加させたいです)

private static void RegisterServices(IKernel kernel)
{
    var port = 8080;
    var uri = new Uri(String.Format("http://{0}:{1}/api", Environment.MachineName, port));

    var baseAddr = new Uri[] { uri };
    var binding = new WebHttpBinding(WebHttpSecurityMode.None);
    var endPoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(MyServiceClassHere))
        , binding, new EndpointAddress(uri));

    kernel.Bind<IProjectRepository>().To<MyRepo>();

    kernel.Bind<WebServiceHost>().To<NinjectWebServiceHost>()
        .WithConstructorArgument("serviceType", typeof(MyServiceClassHere))
        .WithConstructorArgument("baseAddresses", baseAddr);

    var webBehavior = new WebHttpBehavior() { HelpEnabled = true };
    endPoint.Behaviors.Add(webBehavior);

    _host = kernel.Get<WebServiceHost>();
    _host.AddServiceEndpoint(endPoint);
    _host.Open();
}  

Ninject を使用してサービスを接続するためのベスト プラクティスを教えてください。

前もって感謝します。

4

1 に答える 1

0

このブログ投稿は、IIS でホストされている WCF サービスでNinjectを起動して実行するのに役立ちました 。

NinjectModule の Load メソッドをオーバーライドする必要がありました。

public class WCFNinjectModule : NinjectModule
{
    public override void Load()
    {
       Bind<IProjectRepository>().To<MyRepo>();
    }
}

次に、global.asax で CreateKernel() メソッドをオーバーライドする必要がありました。

    protected override IKernel CreateKernel()
    {
            StandardKernel kernel = new StandardKernel(new WCFNinjectModule());
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
            return kernel;
    }
于 2013-11-16T08:53:18.493 に答える