Вы можете зарегистрировать (фактически перерегистрировать, если вы используете builder.RegisterControllers()
) свои контроллеры с параметром , который будет использоваться при разрешении:
builder.RegisterType<SomeController>()
.WithParameter(ResolvedParameter.ForNamed<IFoo>("bar"));
builder.RegisterType<OtherController>()
.WithParameter(ResolvedParameter.ForNamed<IFoo>("baz"));
Если контроллер нуждаетсякратный IFoo
вы можете указать параметр разрешения, например, с именем (с немного дополнительным синтаксисом, но вы можете скрыть его за методом расширения):
builder.RegisterType<ComplexController>().WithParameters(new [] {
new ResolvedParameter((p,c) => p.Name == "bar",(p,c) => c.ResolveNamed<IFoo>("bar")),
new ResolvedParameter((p,c) => p.Name == "baz",(p,c) => c.ResolveNamed<IFoo>("baz"))
});
public class ComplexController: Controller
{
public ComplexController(IFoo baz, IFoo bar)
{
//...
}
}