温莎IoC命名注入:构造函数

时间:2018-07-24 12:29:46

标签: c# asp.net-core dependency-injection inversion-of-control castle-windsor

我想知道如何在温莎实现以下目标。我以前将AutoFac与以下代码配合使用,效果很好,但是我不确定如何在Windsor中完成相同的工作:

// named injection registrations
builder.RegisterType<FoodMarketProvider>().Keyed<IMarketProvider>(MarketProviders.Food.GetDescription()).PropertiesAutowired();            
builder.RegisterType<ClothsMarketProvider>().Keyed<IMarketProvider>(MarketProviders.Cloths.GetDescription()).PropertiesAutowired();

因此,在我的经理中,我可以使用IIndex来获取指定的注射剂:

// market manager constructor
public MarketManager(IIndex<string, IMarketProvider> serviceDictionary)

用法示例:

public Task<dynamic> GetResellerProducts(MarketProviders market)
{
    var marketProvider = base.ServiceDictionary[market.GetDescription()];
    return marketProvider.GetProducts();
}

谢谢!

1 个答案:

答案 0 :(得分:0)

IIndex是Autofac独有的,而Windsor没有确切的对应物。 Type Factories是更通用的工具,通常用于这些情况。您可以配置它们以类似于IIndex as shown in the documentation的方式按名称查找组件。