有人知道如何通过autofac:填充此属性吗
public IEnumerable<ITransactionProcessor<TransactionBase>> TransactionHandlers { get; set; }
有这两个具体的实现:
public class FeeTransactionProcessor : ITransactionProcessor<FeeTransaction>
public class InterestTransactionProcessor : ITransactionProcessor<InterestTransaction>
奇怪的是,下面的代码工作得很好,我在集合中得到了两个项目,它们都实现了ITestTransactionProcessor:
public IEnumerable<ITestTransactionProcessor> TestTransactionHandlers { get; set; }
注意:
IEnumerable<ITransactionProcessor<TransactionBase>>
对比:
IEnumerable<ITestTransactionProcessor>
autofac版本为2.4.4(如果有任何不同的话)。
我可以提供更多的代码/细节,但我认为这会给我一个很好的想法,我正在努力实现什么。
背景是我们为客户加载一个交易列表,我们需要计算客户账户的余额。我们希望有一组处理器(每个事务类型一个),它们将事务和摘要对象作为输入,并输出摘要对象的更新版本,该更新版本通过计算一个客户余额所需的所有处理器传递。因此,我们加载客户、他的交易,并在每个交易中循环,并调用工厂对象来为给定的交易获取处理器,一旦我们有了处理器,我们就去:
state = processor.Process(transaction, state);
直到我们处理完所有交易。那么我们应该有平衡。不幸的是,autofac没有加载处理器,因此工厂对每个事务类型都返回null:/
提前感谢,卢卡斯
您需要确保ITransactionProcessor<T>
已将T
标记为反变体,即:
interface ITransactionProcessor<in T> { ... }
然后,在Autofac:中启用反向解析
builder.RegisterSource(new ContravariantRegistrationSource());