AlexGad
AlexGad

Reputation: 6692

Autofac: resolving different params to object using DependencyResolver

I am building an MVC application and have the need to send a different cachecontext (wraps info on which cache to use) into my repositories using the DependencyResolver. There are 10 different types of cachecontexts that can be passed in. At the moment, I am using 10 different registrations for 10 different types of interfaces (ICacheContexts). This works but does not seem like the correct way of handling this circumstance. Is there a way to create a factory that knows the object type it is being passed to so I can just determine the correct CacheContext to return and thus only have one registration to maintain?

Current code:

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

Upvotes: 0

Views: 467

Answers (1)

Nicholas Blumhardt
Nicholas Blumhardt

Reputation: 31832

You need to do this from the repository side - for each repository, configure its parameters to resolve the right cache context. E.g. (paraphrasing)

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

Hope this gets you on the right track.

Upvotes: 1

Related Questions