我正在构建一个MVC应用程序,并且需要使用DependencyResolver将不同的cachecontext(使用哪个缓存包装信息)发送到我的存储库中。有10种不同类型的cachecontexts可以传入。目前,我正在为10种不同类型的接口(ICacheContexts)使用10种不同的注册。这有效,但似乎不是处理这种情况的正确方法。有没有办法创建一个知道它传递给它的对象类型的工厂,所以我可以确定要返回的正确的CacheContext,因此只需要维护一个注册?
当前代码:
builder.Register(c => new CacheContext(AppConfig.AppBucketName, AppConfig.AppBucketpassword))
.As<ICacheContextForApps>();
builder.Register(c => new CacheContext(AppConfig.AcctBucketName, AppConfig.AcctBucketpassword))
.As<ICacheContextForAccounts>();
etc..
答案 0 :(得分: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"));
希望这能让你走上正轨。