7

これが私のモジュールです

internal class WebServiceConfiguration : NinjectModule
{
    public override void Load()
    {
        Bind<IWebService>().To<WebService>().InRequestScope();
    }
}

これがglobal.asaxです

public class Global : NinjectHttpApplication
{
    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new WebServiceConfiguration());
    }
}

InScope(c => OperationContext.Current) も試しました

これが IWebService で IDisposable を使用した私のサービスです

[ServiceBehavior(InstanceContextMode = InstanceContextModeDefinition.Mode)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WebService : IWebService
{
    private readonly ISomeService _someService;

    public WebService(ISomeService someService)
    {
        _someService = someService;
    }

    public void Dispose()
    {
        _someService.Dispose();
    }

サービス マークアップの ServiceHostFactory は次のとおりです。

<%@ ServiceHost Language="C#" Debug="true" Factory="Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" Service="WCFTest.Services.WebService" CodeBehind="WebService.svc.cs" %>

依存関係の注入が機能します。私の唯一の懸念は、クライアントがサービス呼び出しを閉じたときに dispose メソッドがトリガーされていないことです。

Dipose が呼び出されるかどうかをテストするためだけに Factory="Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" を削除しようとしましたが、呼び出しましたが、もちろん自動注入はありません。セットアップで何か間違っている可能性がありますか?または、Dispose を呼び出さない ninject にバグがありますか?

注: ninject wcf 拡張機能のサンプル セットアップを取得し、DI を追加しました。

あなたの助けに感謝します。

ところで:私はNinject 3.0.0.15、Ninject.Extensions.Wcf 3.0.0.5、Ninject.Web.Common 3.0.0.7を使用しています

4

1 に答える 1

6

使用する

Bind<IWebService, WebService>().To<WebService>().InRequestScope();
于 2012-05-10T11:33:28.453 に答える