如何在注册时不知道依赖类时使用依赖注入?

时间:2011-10-19 17:04:55

标签: dependency-injection unity-container

我对使用Unity Framework的依赖注入几乎没有任何疑问 1>每个类总是需要默认构造函数吗? 2>我们如何注册一个在注册时不知道其依赖类的类,但在后一阶段它将变为avialble。 3>一旦这个依赖类在后一阶段可用,我该如何分配它

例如,我在注册时不知道客户的地址,但地址将在流程的后期知道。我在Global.ascx文件(应用程序启动)中使用Unity容器注册Customer类,我不知道地址。

public class Customer : IPerson<Customer>
{
    private Address _address;

    public Customer(Address address)
    {
        _address = address;
    }
}

1 个答案:

答案 0 :(得分:1)

在实体上使用依赖注入是的典型事情。实体(例如CustomerPerson)通常是包含数据而不是行为的更短寿命的对象,因此不适合依赖注入。

通常,您应该使用某种工厂来创建无法由容器管理的短期对象,或者在您的情况下,使用repository pattern。将ICustomerRepository注入需要处理Customers的服务。

回答您的其他问题:

  

每个类总是需要默认构造函数吗?

不,它没有。作为一般准则,最好为用作服务组件的类(系统中包含行为的类)使用单个公共构造函数,但它不必是默认构造函数。

  

我们如何注册一个其依赖类未知的类   注册时间,但在后期会变得很有用。

一般情况下,您会注入一个工厂,或者在某些情况下,您可以注入一个知道如何在以后创建真实对象的代理。