gpt4 book ai didi

c# - 使用 WCF 服务注入(inject) - Dispose() 未触发

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:21 26 4
gpt4 key购买 nike

我有一个 WCF 服务,它有一些较低级别的服务作为构造函数参数,它们通过 Ninject 注入(inject)并在其中有一个数据库上下文。所有构造函数参数都是 IDisposable。该服务如下所示:

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class DirectoryService : IDirectoryService
{
private IDomainService DomainService { get; set; }

public DirectoryService(IDomainService domainService)
{
DomainService = domainService;
}
...
}

我想在每个方法调用完成后处理这些实例,我尝试按如下方式设置我的绑定(bind):

        private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IDomainService>().To<DomainService>().InScope(x => OperationContext.Current);
...
}

还有这样的:

            private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IDomainService>().To<DomainService>().InScope(x => HttpContext.Current);
...
}

像这样:

                private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IDomainService>().To<DomainService>().InRequestScope();
...
}

在成功调用该服务后,仍然没有任何选项真正处理我的项目,欢迎提出任何想法,在此先感谢您。

最佳答案

AFAIR .InScope()(HttpContext.CurrentOperationContext.Current)都有效 - 但不是您所期望的那样。 Ninject 会为范围对象保留一个 WeakReference 并定期检查它是否被收集。如果它被收集,它将在它的范围内处理该对象。如果没有内存压力,这可能需要很长时间。

InRequestScope(); 如果你有 Ninject.Extensions.Wcf 应该可以工作安装。但请注意,您还需要确保您拥有最新版本的 Ninject.Web.Common - 3.2.3因为有一个 issue with a previous version where .InRequestScope() didn't work .

关于c# - 使用 WCF 服务注入(inject) - Dispose() 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27536873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com