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