相关疑难解决方法(0)

你如何协调IDisposable和IoC?

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

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

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

c# idisposable inversion-of-control unity-container

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

如何创建一个Ninject自定义作用域,它返回相同的对象,直到该对象被处置?

在Ninject中,在单例范围内声明绑定意味着每次都会返回相同的对象.永远只能有一个对象.

我想要的是一次返回一个对象.换一种说法:

  1. 第一次调用Get()实例化一个新对象并返回它.
  2. 对Get()的后续调用返回相同的实例.
  3. 物体被丢弃.
  4. 在处理对象之后对Get()的第一次调用实例化一个新的/第二个对象并返回该对象.
  5. 对Get()的后续调用将返回在步骤4中创建的对象.

编辑:使用提供程序解决此问题实际上相当简单,并且在处理时让相关对象引发事件.我很好奇是否有办法在Ninject中使用范围进行此操作,并且会在此留下这个问题,因为史蒂文的答案非常好.

scope dependency-injection ninject inversion-of-control

6
推荐指数
1
解决办法
3477
查看次数

处置构造函数注入对象

假设我有一个与另一个班级相关联的班级.它看起来像下面这样:

public class DisposableClassOne : IDisposable
{
   private class mDisposableClassTwo;

   public DisplosableClassOne(DisposableClassTwo dcTwoInjected)
   {
      mDisposableClassTwo = dcTwoInjected;
   }

   public void Dispose()
   {
      // Should I dispose here? or make caller dispose of dcTwoInjected
      //mDisposableClassTwo.Dispose();
   }
}
Run Code Online (Sandbox Code Playgroud)

我应该调用Dispose方法mDisposableClassTwo还是应该让调用者像这样处理它?

using(DisposableClassTwo dcTwoInjected = new DisposableClassTwo())
using(DisposableClassOne dcOne = new DisposableClassOne(dcTwoInjected))
{
   // do stuff with dcOne
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑让调用者处理它是最好的方法,但我认为通过在Dispose方法中调用它可以保证它会被调用.有没有更好的方法来处理这个?

c# dependency-injection idisposable winforms

3
推荐指数
1
解决办法
2095
查看次数