Как настроить StructureMap для предоставления двух отдельных экземпляров одного типа для двух аргументов?

У меня есть ситуация, когда конструктор класса требует двух экземпляров одного и того же конкретного типа, реализующих интерфейс. Это позволяет использовать "Задачи", чтобы запускать их параллельно, чтобы сократить время.

Код конструктора выглядит так:

public SomeUsingClass (ISomeDependency someDepOne, ISomeDependency someDepTwo) {}

Здесь у меня есть только один конкретный класс, который реализует ISomeDependency, который является SomeDependencyClass.

Когда я получаю экземпляр SomeUsingClass, я должен убедиться, что два аргумента указывают на отдельные экземпляры SomeDependencyClass. Это связано с тем, что когда экземпляры будут использоваться в рамках двух отдельных задач, их "состояния" не должны конфликтовать с другими.

Я попытался использовать именованные экземпляры ISomeDependency (назвал их "instanceOne" и "instanceTwo". Код выглядит следующим образом:

.For<ISomeDependency>().Add<SomeDependency>().Named("instanceOne");
.For<ISomeDependency>().Add<SomeDependency>().Named("instanceTwo");

... и затем использовал следующее для создания экземпляра класса using:

.For<SomeUsingClass>().Use<SomeUsingClass>()
.Ctor<ISomeDependency>("someDepOne")
.IsNamedInstance("instanceOne")
.Ctor<ISomeDependency>("someDepTwo")
.IsNamedInstance("instanceTwo");

Это приводит к следующей ошибке:

Экземпляр по умолчанию не зарегистрирован и не может быть автоматически определен для типа "ISomeDependency".

Я явно упомянул, чтобы использовать конкретный экземпляр с именем. Где я неправ?

1 ответ

Все, что вам нужно, это указать, что при регистрации в AlwaysUnique():

.For<ISomeDependency>().AlwaysUnique().Add<SomeDependency>().Named("instanceOne");
.For<ISomeDependency>().AlwaysUnique().Add<SomeDependency>().Named("instanceTwo");
Другие вопросы по тегам