Autofac在Ninject中的属性AutoWired的等价物是什么



在Autofac中,我们有属性AutoWired。它写在那里

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

似乎我们应该在需要进行属性注入时使用此选项。所以我想知道如果是Ninject的话会是什么样子。

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();

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

另请参阅ninjectwiki上的属性注入文档。

此外,请注意,构造函数注入是首选方案。您应该只在不能使用构造函数注入或其他特殊情况下使用属性注入,比如您无法摆脱继承层次结构,并且不想在类层次结构中向下传递构造函数参数10步。。。

使用属性的替代方法

如果你不想用对Ninject的引用来扰乱你的代码,你也可以这样做属性注入:

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

最新更新