我喜欢使用构造函数注入(inject)进行依赖项注入(inject)。它可以从类型中明确声明所关注的问题,并有助于可测试性。
我在大多数地方都喜欢构造函数注入(inject)...
以我不喜欢的日志记录为例。如果我有一个继承许多其他类的基类,并且我希望所有这些类都使用ILogger的实例(或其他任何实例),并且我不希望使用静态工厂(Logger.Instance)...我不需要在每个采用ILogger的子类上声明一个构造函数。
因此,我可以让我的基类将记录器声明为Property并将其注入(inject)
public class MyBaseClass
{
public ILogger Logger { get; set; }
}
...但
所以...我还有什么其他选择? (我正在使用温莎城堡)。
我已经考虑过要制作一个界面
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;
}
}
然后在我的容器上有一个设施,可以在类型构造时自动调用
IInitializable<T>
的所有实现...但是我想知道在走那条路之前其他人的想法是什么...
最佳答案
在您的情况下,我将使用属性注入(inject)。
可以将属性注入(inject)切换为强制性,如下所示:
http://www.mail-archive.com/[email protected]/msg08163.html
关于.net - 构造注入(inject)方案(城堡温莎),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4401490/