DSL реестра StructureMap для сценария с именованным экземпляром - PullRequest
0 голосов
/ 03 июня 2011

У меня есть сценарий, в котором мне нужно иметь возможность получить две разные реализации интерфейса IObjectContext из StructureMap.Я знаю, что использование именованного экземпляра является ответом, но у меня возникли проблемы с DSL, потому что класс «use» также одинаков в каждом случае, но с другим параметром конструктора.способ создания этих объектов вне StructureMap заключается в следующем:

IObjectContext context1 = new ObjectContextAdapter(new Model1Entities());
IObjectContext context2 = new ObjectContextAdapter(new Model2Entities());

Как я могу выразить эту конфигурацию в StructureMap Registry DSL?Я знаю, что мне нужно использовать именованные экземпляры, но я не могу разобраться с остальной частью синтаксиса.

Спасибо !!!

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Недавно мы столкнулись с подобной проблемой при попытке зарегистрировать несколько именованных экземпляров одного и того же конкретного типа (в нашем случае это было в пользовательском сканере) - Structuremap не позволяет вам делать это напрямую.

В конце мы должны были использовать метод ConstructedBy, передавая выражение, которое явно создает конкретный тип.

Здесь стоит проверить StructureMap - Настройка экземпляров в качестве отправной точки.

Edit: Я думаю, что это именно то, что вы, вероятно, хотите в своем реестре (спасибо PHeiberg за предложение Add ()):

For<IObjectContext>().Add(() => new ObjectContextAdapter(new Model1Entities())).Named("objectContext1");
For<IObjectContext>().Add(() => new ObjectContextAdapter(new Model2Entities())).Named("objectContext2");
0 голосов
/ 06 июня 2011

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

...