Autofac:使用DependencyResolver将不同的参数解析为对象

时间:2011-02-01 18:20:56

标签: autofac

我正在构建一个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..

1 个答案:

答案 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"));

希望这能让你走上正轨。