Внедрение не примитивных типов без оборачивания их в интерфейс в StructureMap - PullRequest
1 голос
/ 16 марта 2009

У меня есть простой реестр SM, где я настраиваю все свои экземпляры IDynamicValue. У меня есть несколько аргументов конструктора, которые не являются примитивными типами (в моем случае это DateTime и Predicate Of T). Есть ли способ, которым я могу внедрить их без необходимости заключать их в класс с интерфейсом (чтобы они могли быть автоматически подключены). Следующий фрагмент кода показывает, чего я хотел бы достичь:

ForRequestedType<IDynamicValue>().AddInstances(x =>
             {
                 x.OfConcreteType<DateTimeGenerator>().WithName("DateTime")
                     .WithCtorArg("keyName").EqualTo("DateTime")
                     .WithCtorArg("startDate").EqualTo(DateTime.Now.AddMonths(-1))
                     .WithCtorArg("minuteIntervalDelta").EqualTo(60);

             });

Этот пример выполняется, но завершается ошибкой, за исключением:

Код исключения StructureMap: 202 Не определен экземпляр по умолчанию для PluginFamily System.DateTime

Спасибо, Nic

EDIT:

Решение Фредди Риоса отлично подошло для того, что мне было нужно. Мне все еще любопытно, есть ли способ сделать это, если бы я автоматически связывал некоторые аргументы конструктора (следовательно, не мог использовать ConstructedBy ())

1 Ответ

1 голос
/ 16 марта 2009

Если вы уже передаете все аргументы в конструктор, вы можете вместо этого использовать ConstructedBy:

x.ConstructedBy(y => new DateTimeGenerator(
          "DateTime", DateTime.Now.AddMonths(-1), 60
         )
   ).WithName("DateTime");
...