在Autofac中我们有PropertiesAutoWired。它写在那里
如果组件是反射组件,请使用PropertiesAutowired()修饰符来注入属性。
似乎我们应该在需要进行属性注入时使用它。所以我想知道Ninject会是什么样的。
答案 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>());