我正在使用一个使用构造函数注入的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)可以被消费类传递?
或者这是代码味道?如果是这样,如何修改?
答案 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中的参数名称相对应。