Injectar tipos não-primitivos sem colocá-los em uma interface em StructureMap
-
19-08-2019 - |
Pergunta
Eu tenho um simples SM Registry onde estou configurando todos os meus casos de IDynamicValue. Eu tenho alguns argumentos contructor que são tipos não-primitivos (no meu caso um DateTime e um predicado da T). Existe uma maneira que eu possa injetar estes sem ter que envolvê-los em uma classe com uma interface (para que eles possam ser auto-fio). O seguinte mostra trecho de código que eu gostaria de realizar:
ForRequestedType<IDynamicValue>().AddInstances(x =>
{
x.OfConcreteType<DateTimeGenerator>().WithName("DateTime")
.WithCtorArg("keyName").EqualTo("DateTime")
.WithCtorArg("startDate").EqualTo(DateTime.Now.AddMonths(-1))
.WithCtorArg("minuteIntervalDelta").EqualTo(60);
});
Esse exemplo executa mas falha com a exceção:
StructureMap Exception Código: 202 Sem Instância padrão definido para PluginFamily System.DateTime
Obrigado, Nic
EDIT:
solução Freddy Rios trabalhou perfeito para o que eu precisava. Eu ainda estou curioso para saber se existe um método de fazer isso se eu estava auto-fiação alguns argumentos contructor (daí não poderia usar ConstructedBy ())
Solução
Se você já está passando todos os argumentos para o construtor, você poderia usar ConstructedBy vez:
x.ConstructedBy(y => new DateTimeGenerator(
"DateTime", DateTime.Now.AddMonths(-1), 60
)
).WithName("DateTime");