I have autofac set up to do dependency injection of my asp.net MVC controllers, like so:
System.Web.Mvc.DependencyResolver
.SetResolver(new AutofacDependencyResolver(container));
And it is working fine. However, I have several implementations of an interface (say, IFoo) that I want to register as named instances:
builder.Register<Bar>(c => new Bar()).Named<IFoo>("bar");
builder.Register<Baz>(c => new Baz()).Named<IFoo>("baz");
...
And I have several controllers which take an IFoo in their constructor. But each controller needs a different concrete implementation of IFoo. How can I tell autofac which controller needs “bar” and which needs “baz”?
You can register (actually re-register if you are using
builder.RegisterControllers()) your controllers with the parameter which will be used during resolve:If a controller needs multiple
IFooyou can specify the resolve parameter e.g. with name (with a little bit extra syntax, but you can hide it behind an extension method):