2011-02-01 67 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