使用Ninject Dispose的WCF不会在requestscope中触发

Pet*_*Lim 7 wcf ninject

这是我的模块

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

这是global.asax

public class Global : NinjectHttpApplication
{
    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new WebServiceConfiguration());
    }
}
Run Code Online (Sandbox Code Playgroud)

我也试过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();
    }
Run Code Online (Sandbox Code Playgroud)

这是服务标记中的ServiceHostFactory

<%@ ServiceHost Language="C#" Debug="true" Factory="Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" Service="WCFTest.Services.WebService" CodeBehind="WebService.svc.cs" %>
Run Code Online (Sandbox Code Playgroud)

注入依赖项有效.我唯一关心的是当客户端关闭服务调用时没有触发dispose方法.

我试图删除Factory ="Ninject.Extensions.Wcf.NinjectDataServiceHostFactory"只是为了测试是否会调用Dipose,它确实调用但当然我不会自动注入.所以我可能会在设置中出错?或者ninject没有调用Dispose的错误?

注意:我在ninject wcf扩展中获取了示例设置,并添加了一些DI.

我们将不胜感激.

顺便说一句:我正在使用Ninject 3.0.0.15,Ninject.Extensions.Wcf 3.0.0.5,Ninject.Web.Common 3.0.0.7

Rem*_*oor 6

使用

Bind<IWebService, WebService>().To<WebService>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)

  • WCF请求WebService实例而不是IWebService (2认同)