Jef*_*eff 6 .net dependency-injection castle-windsor inversion-of-control
我喜欢构造函数注入依赖注入.它强制从类型中明确声明问题,并有助于可测试性.
我喜欢Constructor注入,在大多数地方......
记录我不喜欢的例子.如果我有一个基类,许多其他类继承,我希望所有这些类都使用我的ILogger(或其他)的实例,我不想要一个静态工厂(Logger.Instance)...我不希望必须在每个采用ILogger的子类上声明构造函数.
所以,我可以让我的基类将logger声明为Property并让它以这种方式注入
public class MyBaseClass
{
public ILogger Logger { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...但
那么......我还有其他选择吗?(我正在使用Castle Windsor).
我打算制作一个界面
public interface IInitializable<T>
{
void Initialize(T instance);
}
public class MyBaseClass : IInitializable<ILogger>, ...could have other IInitializables too...
{
protected ILogger Logger { get; private set; }
public void Initialize(ILogger instance)
{
Logger = instance;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的容器上有一个工具,它自动调用所有IInitializable<T>类型构造的实现......
但在我走这条路之前,我想知道其他人的想法是什么......
在你的情况下,我会使用属性注入。
属性注入可以切换为强制,如下所述: http://www.mail-archive.com/castle-project-users@googlegroups.com/msg08163.html