Ответ 1
Вы можете зарегистрировать (фактически перерегистрировать, если используете builder.RegisterControllers()
) свои контроллеры с parameter, которые будут использоваться во время разрешения:
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)
{
//...
}
}