2011-02-01 69 views
0

我正在構建一個MVC應用程序,並且需要使用DependencyResolver將不同的cachecontext(將使用的緩存信息包裝到我的存儲庫中)發送到我的存儲庫。有10種不同類型的cachecontext可以傳入。目前,我爲10種不同類型的接口(ICacheContexts)使用了10種不同的註冊。這有效,但似乎不是處理這種情況的正確方法。有沒有辦法創建一個知道它傳遞給它的對象類型的工廠,這樣我就可以確定返回正確的CacheContext,因此只有一個註冊需要維護?Autofac:使用DependencyResolver將不同的參數解析爲對象

當前代碼:

builder.Register(c => new CacheContext(AppConfig.AppBucketName, AppConfig.AppBucketpassword)) 
       .As<ICacheContextForApps>(); 
builder.Register(c => new CacheContext(AppConfig.AcctBucketName, AppConfig.AcctBucketpassword)) 
       .As<ICacheContextForAccounts>(); 
etc.. 

回答

1

您需要從庫邊做 - 每個倉庫,它的配置參數,以解決正確的緩存內容。例如。 (改寫)

builder.Register(c => new CacheContext(...for appls...)) 
    .Named<ICacheContext>("apps"); 

builder.RegisterType<AppsRepository>() 
    .WithParameter((pi, c) => pi.ParameterType == typeof(ICacheContext), 
        (pi, c) => c.ResolveNamed<ICacheContext>("apps")); 

希望這會讓你走上正軌。

+0

現在,這是美的事情。我瞥了一眼WithParameter,但並不認爲這會有所幫助。所以我應該能夠使用RegisterAssemblyTypes和AsImplementedAssemblies來根據名稱空間自動將我的程序集調用到正確的CacheContext中?這絕對比我採取的道路更加優雅。謝謝! – AlexGad 2011-02-05 05:32:24