相关疑难解决方法(0)

你如何协调IDisposable和IoC?

我终于在C#中围绕IoC和DI缠绕我的头,并且正在努力解决一些问题.我正在使用Unity容器,但我认为这个问题适用范围更广.

使用IoC容器来分配实现IDisposable的实例让我感到害怕!你怎么知道你应该Dispose()?该实例可能是专门为您创建的(因此您应该Dispose()它),或者它可能是其生命周期在其他地方管理的实例(因此您最好不要).代码中没有任何内容告诉您,实际上这可能会根据配置发生变化!这对我来说似乎是致命的.

任何IoC专家都可以描述处理这种模糊性的好方法吗?

c# idisposable inversion-of-control unity-container

41
推荐指数
2
解决办法
1万
查看次数

无法让Ninject在Request Scope中处理对象

无论我做什么,我似乎无法让Ninject在带有Web API的ASP.NET MVC应用程序中处理请求范围内的对象.

我在做什么:

  • 使用Visual Studio 2013创建一个新的ASP.NET Web应用程序.我选择MVC模板并向其添加Web API(默认情况下它还包含ASP.NET标识)
  • 我通过nuget安装Ninject.MVC5包(install-package Ninject.MVC5)
  • 我在我的应用程序中添加了以下类:

    public class SomeDisposable:IDisposable {public void Dispose(){System.Diagnostics.Debug.WriteLine("test"); }}

  • 我在NinjectWebCommon RegisterServices方法中添加以下绑定

    kernel.Bind()ToSelf()InRequestScope().;

  • 我将一个SomeDisposable类型的对象添加到Home控制器

    public HomeController(SomeDisposable some){}

  • 我运行应用程序并在HomeController构造函数和SomeDisposable类的Dispose方法中放置一个断点.控制器接收一个对象(可能来自Ninject),页面加载但从不调用Dispose方法.

  • 在这一点上,事情已经破碎,但我添加了一个Web API控制器,安装Ninject.WebApi打包并使用WebAPI控制器重复实验,我得到了相同的结果.

我已经阅读了很多问题,包括这一个问题 - 当超出范围时,Ninject不会调用对象上的Dispose和Ninject文档https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope,它们都表示由于Ninject.Web.Common包含了对OnePerRequestHttpModule的注册(是的,它存在),因此处理应该正常工作,但事实并非如此.我还尝试在web.config中添加PerRequest模块,并收到错误消息,说我不能在集成模式下使用此部分.

此时我迷失了.我怀疑集成模式或OWIN与此有关,但我不知道如何调试它或如何解决它.有什么建议?

c# asp.net asp.net-mvc ninject asp.net-web-api

4
推荐指数
1
解决办法
2058
查看次数