При регистрации именованных экземпляров, которые не должны быть экземпляром по умолчанию, вы используете метод Add:
x.For<IFishRepository>()
.Add(() => new TunaRepository(serviceEndpoint))
.Named("Tuna");
Также обратите внимание, что если вы не хотите, чтобы TunaRepository был Singleton, вы должны зарегистрировать его с помощью лямбды. Лямбда будет оцениваться при запросе экземпляра и в моем примере будет возвращать новый экземпляр. Следите также за serviceEndpoint и убедитесь, что вам нужен этот единственный экземпляр для всех репозиториев. Обычно я склоняюсь к тому, чтобы связать все мои зависимости, используя For <> (). Используйте <> () в структурной карте, где это возможно, вместо использования «new». Это делает архитектуру намного более гибкой, тем более что вы можете добавлять новые параметры в ctors без изменения регистраций.
Для указания именованного экземпляра, который будет использоваться в конструкторе, вы можете использовать этот синтаксис:
x.For<TunaController>().Use<TunaController>().
Ctor<IFishRepository>("repo").
Is(i => i.TheInstanceNamed("Tuna"));
Поскольку все ваши регистрации следуют одним и тем же шаблонам, я бы использовал IRegistrationConvention , чтобы удалить дублирующийся код и минимизировать усилия по добавлению новых репозиториев.