什么是Ninject中Autofac的PropertiesAutoWired等价物

时间:2015-12-08 04:09:54

标签: ninject

在Autofac中我们有PropertiesAutoWired。它写在那里

如果组件是反射组件,请使用PropertiesAutowired()修饰符来注入属性。

似乎我们应该在需要进行属性注入时使用它。所以我想知道Ninject会是什么样的。

1 个答案:

答案 0 :(得分:1)

Ninject没有与Autofacs PropertiesAutowired()等效的功能。而是使用属性[Inject]标记属性 - 组件的绑定不受影响:

public class FooBar
{
    // will be injected
    [Inject]
    public IDependency Dependency { get; set; }

    // will not be injected
    public IFalaffel Falaffel {get; set;
}

绑定不受影响。例如

Bind<FooBar>().ToSelf();

完全有效,并且(属性)将被注入。

另请参阅ninject wiki上的Property Injection文档。

另外请注意,构造函数注入是首选替代方法。你应该只使用属性注入,以防你不能使用构造函数注入或一些其他特殊情况,比如你无法摆脱继承层次结构,并且不希望在类层次结构中向下传递构造函数参数... < / p>

使用属性的替代方法

如果你不想通过引用Ninject来混淆代码,你也可以像这样进行属性注入:

Bind<FooBar>().ToSelf()
    .OnActivation((ctx, instance) => instance.Dependency = ctx.Kernel.Get<IDependency>());