使用Autofac基于另一个对象的值在运行时注入对象

时间:2014-09-29 16:10:28

标签: c# dependency-injection autofac

如何使用Autofac基于另一个对象的值在运行时注入对象?

我想做类似下面的事情,在那里我可以注册每个AggregateQuoteManager并根据我从ITenancyContext获得的租期调用我在运行时需要的那个

    builder.RegisterType<AggregateQuoteManagerTenancyA>().Named<IAggregateQuoteManager>("aggregateQuoteManagerForTenancyA");

    builder.RegisterType<AggregateQuoteManagerTenancyB>().Named<IAggregateQuoteManager>("aggregateQuoteManagerForTenancyB");

    builder.RegisterType<AggregateQuoteManagerDefault>().Named<IAggregateQuoteManager>("aggregateQuoteManagerDefault");

    builder.Register(c =>
            {
                var tenancy = DependencyResolver.Current.GetService<ITenancyContext>().ShortCode;

                switch (tenancy.ShortCode)
                {
                    case "Tenancy-A":
                        return c.ResolveNamed<IAggregateQuoteManager>("aggregateQuoteManagerForTenancyA");
                    case "Tenancy-B":
                        return c.ResolveNamed<IAggregateQuoteManager>("aggregateQuoteManagerForTenancyB");
                    default:
                        return c.ResolveNamed<IAggregateQuoteManager>("aggregateQuoteManagerDefault");
                }
            }
     ).As<IAggregateQuoteManager>();

1 个答案:

答案 0 :(得分:0)

我采用了Travis Illig的方法 - &#34;&#34;其他对象&#34;看起来像租户标识符。您是否尝试过Autofac多租户支持?&#34; - 它更简单,谢谢