Создание экземпляра StructureMap - PullRequest
2 голосов
/ 24 февраля 2009

У меня есть конкретные типы для интерфейсов, настроенных при запуске, но я хочу создавать экземпляры конкретного типа во время выполнения с настройкой свойств или установкой различных значений в конструкторе. Все создаваемые экземпляры, которые я вижу, знают, что такое конкретный тип, во время выполнения я не знаю конкретный тип. Есть ли способ создать конкретный экземпляр интерфейса / класса, не зная конкретный тип? Вот что я видел:

[Test]
public void DeepInstanceTest_with_SmartInstance()
{
    assertThingMatches(registry =>
    {
        registry.ForRequestedType<Thing>().TheDefault.Is.OfConcreteType<Thing>()
                .WithCtorArg("name").EqualTo("Jeremy")
                .WithCtorArg("count").EqualTo(4)
                .WithCtorArg("average").EqualTo(.333);
        });
}

OR

var container = new  Container(x =>
{
    x.ForConcreteType<SimplePropertyTarget>().Configure
     .SetProperty(target =>
     {
         target.Name = "Max";
         target.Age = 4;
     });
});

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

Ответы [ 2 ]

2 голосов
/ 25 февраля 2009

Нашел ответ с указанием от Джереми Миллера (автора StructureMap). Вот где он указал мне:

http://structuremap.sourceforge.net/RetrievingServices.htm#section5

вот пример того, что я использовал:

IDatabaseRepository repo =
                ObjectFactory.With("server").EqualTo("servername").
                With("database").EqualTo("dbName").
                With("user").EqualTo("userName").
                With("password").EqualTo("password").
                GetInstance<IDatabaseRepository>();
0 голосов
/ 25 февраля 2009

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

...