小编Gib*_*nag的帖子

基类上的Ninject属性注入

我正在尝试使用注入属性ninject.考虑到ninject下面模块中的两个绑定,我希望将ConcreteDependency其注入B.
但是,似乎WhenInjectedInto不考虑注入的类型,只考虑目标的声明类型(在这种情况下为属性).

有没有办法实现我预期的行为?

static void Main(string[] args)
{
    var kernel = new StandardKernel(new TestModule());
    var b = kernel.Get<B>();
    var c = kernel.Get<C>();
}

class TestModule : NinjectModule
{
    public override void Load()
    {
        Bind<IDependency>().To<EmptyDependency>();
        Bind<IDependency>().To<ConcreteDependency>().WhenInjectedInto<B>();
    }
}

abstract class A
{
    [Inject]
    public IDependency Dependency { get; set; }
}

class B : A {}

class C : A {}

interface IDependency {}

class EmptyDependency : IDependency { }

class …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection ninject

7
推荐指数
2
解决办法
4650
查看次数

自动处置延期方式合理吗?

我一直在编写一些自定义 WinForm 控件,这些控件执行大量绘图,因此往往有大量基于一次性图形的字段(画笔、笔、位图等),因此我的控件的 Dispose()方法必须对每个方法调用 Dispose。

我担心我(或未来的维护者)很容易错过需要处理的字段,要么忘记处理它,要么没有意识到它实现了 IDisposable。因此,我在 Object 上编写了一个非常简单的扩展方法,它查找所有 IDisposable 字段并处理它们:

static public void DisposeAll(this Object obj)
{
   var disposable = obj.GetType()
                       .GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)
                       .Select(fi => fi.GetValue(obj))
                       .Where(o => o != null && o is IDisposable)
                       .Cast<IDisposable>();

   foreach (var d in disposable) d.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

我的问题基本上是这是否合理。我想不出它可能会搞砸什么,但是我对 WinForms 的内部工作原理并不是特别熟悉,这似乎是一种可能会导致令人恼火的错误的事情(扰乱反射和处置)。

.net c# extension-methods dispose

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