2014-09-29 120 views
0

如何使用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>(); 
+0

那麼,有什麼問題?你的代碼示例是行得通的,不是嗎? – Steven 2014-09-29 17:28:51

+0

另外,與問題無關:如果Autofac已經是您的依賴關係解析器,請不要在您的lambda中使用DependencyResolver.Current.GetService。解決入站組件上下文中的所有問題。 – 2014-09-30 18:04:02

+0

「其他對象」看起來像租戶標識符。您是否嘗試過Autofac multitenant支持? http://autofac.readthedocs.org/en/latest/advanced/multitenant.html – 2014-09-30 18:04:53

回答

0

我把特拉維斯Illig公司的approach-「的」其他對象「看起來像一個租戶標識符,您是否嘗試過Autofac多租戶支持? - 它簡單得多,謝謝

相關問題