当类本身不需要通过名称获取具体实现时,如何通过名称获取构造函数依赖项。
public class PriceValidator : IPriceValidator
{
private readonly IEnumerable<IPriceValidationRule> _priceValidationRules;
public PriceValidator(IEnumerable<IPriceValidationRule> priceValidationRules)
{
_priceValidationRules = priceValidationRules;
}
public bool IsPriceValid(decimal price)
{
return _priceValidationRules.All(priceValidator => priceValidator.IsPriceValid(price));
}
}
呼叫:
_priceValidator = ObjectFactory.GetInstance<IPriceValidator>();
所以我想要一个具体的IPriceValidator实现,但需要具体的(按名称)验证规则。
编辑:
我的规则:
For<IPriceValidationRule>().Use<MaxPriceValidationRule>().Named("A");
For<IPriceValidationRule>().Use<MinPriceValidationRule>().Named("A");
For<IPriceValidationRule>().Use<MyDoublePriceValidationRule>().Named("B");
For<IPriceValidationRule>().Use<MyPriceValidationRule>().Named("B");
我如何使用不同名称的相同规则?所以,当我说给我所有名为“X”的实例时,我想得到MaxPriceValidationRule?
答案 0 :(得分:2)
我建议你创建自己的工厂。该工厂将处理创建您的类的特定实例。然后将此工厂注入依赖项,您希望使用特定实例。
答案 1 :(得分:0)
您可以使用以下语法指定应将哪些对象注入可枚举参数:
ObjectFactory.Configure(c =>
{
c.For<IPriceValidator>().Use<PriceValidatory>()
.EnumerableOf<IPriceValidationRule>().Contains(i => {
i.Type<ValidationRule1>();
i.Type<ValidationRule2>();
});
});