Autofac:使用DependencyResolver将不同的参数解析为对象
问题描述:
我正在构建一个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..
答
您需要从库边做 - 每个仓库,它的配置参数,以解决正确的缓存内容。例如。 (改写)
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"));
希望这会让你走上正轨。
现在,这是美的事情。我瞥了一眼WithParameter,但并不认为这会有所帮助。所以我应该能够使用RegisterAssemblyTypes和AsImplementedAssemblies来根据名称空间自动将我的程序集调用到正确的CacheContext中?这绝对比我采取的道路更加优雅。谢谢! – AlexGad 2011-02-05 05:32:24