t3m*_*jin 9 dependency-injection ninject ioc-container ninject-2
有没有办法在不使用[Inject]属性的情况下在Ninject 2中使用Property Injection ?这会在类中使用Ninject创建一个依赖项,我宁愿避免对IoC容器有不必要的依赖,这就是我最常使用Constructor Injection的原因.
我想这同样适用于方法注入
我按照鲁本的提示发布了一篇关于如何实现这一目标的小博文,但这里的答案很简单:
创建自定义属性:
public class InjectHereAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)
目标类现在看起来像这样:
public class Samurai
{
[InjectHere]
public IWeapon Context { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在必须将Ninject配置为使用自定义属性,这可以通过创建识别自定义属性的IInjectionHeuristic实现来完成:
public class CustomInjectionHeuristic : NinjectComponent, IInjectionHeuristic, INinjectComponent, IDisposable
{
public new bool ShouldInject(MemberInfo member)
{
return member.IsDefined(
typeof(InjectHereAttribute),
true);
}
}
Run Code Online (Sandbox Code Playgroud)
最后使用Components集合将此行为添加到Ninject内核,它将沿现有组件运行,即IInjectionHeuristic的默认实现,这意味着可以使用默认属性或自定义属性.
// Add custom inject heuristic
kernel.Components.Add<IInjectionHeuristic, CustomInjectionHeuristic>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2575 次 |
| 最近记录: |