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

C# 使用Autofac在运行时基于另一个对象的值将对象注入,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,如何使用Autofac在运行时基于另一个对象的值将对象注入 我想做下面这样的事情,在这里我可以注册每个AggregateQuoteManager,并在运行时根据从ITenancyContext获得的租约调用所需的AggregateQuoteManager builder.RegisterType<AggregateQuoteManagerTenancyA>().Named<IAggregateQuoteManager>("aggregateQuoteManager

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

我想做下面这样的事情,在这里我可以注册每个AggregateQuoteManager,并在运行时根据从ITenancyContext获得的租约调用所需的AggregateQuoteManager

    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>();

我采用了Travis Illig的方法-另一个对象看起来像租户标识符。您尝试过Autofac多租户支持吗?-它简单多了,谢谢你

那么,有什么问题吗?您的代码示例是否有效?另外,与以下问题无关:如果Autofac已经是依赖项解析程序,则不要在lambda中使用DependencyResolver.Current.GetService。解析入站组件上下文中的所有内容。另一个对象看起来像租户标识符。您是否尝试过Autofac多租户支持?