构建具有注入服务和数据的类的依赖注入

时间:2010-11-29 11:25:26

标签: dependency-injection castle-windsor ioc-container

我正在使用一个使用构造函数注入的IoC容器(例如Castle Windsor)。我有以下(示例)类来管理产品...

public class ProductDataManager
{
    public ProductDataManager(Product product, IProductDataLoader productDataLoader)
    {
    }

    // a number of methods here that manage the products data in different ways...
}

它依赖于Product,只有类使用者知道。它还依赖于产品数据加载器服务。我在IoC容器中定义了该服务的实现者。

如何在IoC容器(和/或消费类)中定义此类(ProductDataManager),以便IoC容器可以注入服务依赖项(IProductDataLoader),并且数据依赖项(Product)可以被消费类传递?

或者这是代码味道?如果是这样,如何修改?

1 个答案:

答案 0 :(得分:4)

您可以使用TypedFactoryFacility并执行此类操作(在我的脑海中)...首先,为您的抽象工厂定义一个界面:

public interface IProductDataManagerFactory
{
    ProductDataManager Create(Product product);
}

像这样注册工厂:

container.AddFacility<TypedFactoryFacility>();
container.Register(Component.For<IProductDataManagerFactory>().AsFactory());

现在服务可以依赖IProductDataManagerFactory并让Windsor通过自动实施的工厂调用container.Resolve

请注意,方法签名中的参数名称product必须与ProductDataManager的ctor中的参数名称相对应。