【发布时间】:2014-11-04 22:44:32
【问题描述】:
我有一个基类 Base,它具有依赖关系 Dep 和默认以及注入构造函数-
Class Base : IBase
{
public IDep Dep { get; set; }
public Base()
{
Console.WriteLine("Default Constructor Base ");
}
[InjectionConstructor]
public Base(IDep dep)
{
Console.WriteLine("Injection Constructor Base ");
Dep = dep;
}
}
我认为在解析派生类时应该自动注入依赖项(通过构造函数注入)。
但是当我从中派生一个类并解析该类时,这似乎不起作用,而是调用 Base 的默认构造函数。
只有当我从派生类中显式调用构造函数时,我才能让它工作。
class Derived : Base
{
public Derived ()
{
Console.WriteLine("Default Constructor Derived ");
}
public Derived (IDep dep) : base(dep1)
{
Console.WriteLine("Injection Constructor Derived ");
}
}
unity 是否提供任何直接方式来隐式调用基类的注入构造函数(而不是通过显式构造函数调用)? 如果没有,是否有任何理由说明为什么统一容器不能自己做?
【问题讨论】:
-
您的问题是由多个构造函数引起的。您的服务应该只有一个构造函数。拥有multiple constructors is an anti-pattern,应该避免。
-
@Steven 我明白你的意思,多个构造函数是一种反模式。但是删除 Default 构造函数并不能解决这里的目的。
-
我认为它实际上解决了你的问题,因为如果
Base和Derived都只包含一个接受所需依赖项的构造函数,那么问题根本不会存在。不过,我确实同意@BatteryBackupUnit 的观点,即拥有基类可能不是最好的设计。 -
@Steven Should we always include a default constructor in the class 。如果不定义默认构造函数,我就不能拥有参数化构造函数。
-
@Steven 即使我跳过基类中的默认构造函数,我的派生类构造函数也会给编译器错误。
标签: c# dependency-injection unity-container constructor-injection