2009-03-16 6 views
1

Ich habe eine einfache SM Registry, in der ich alle meine Instanzen von IDynamicValue konfiguriere. Ich habe einige Konstruktorargumente, die nicht-primative Typen sind (in meinem Fall eine DateTime und ein Prädikat von T). Gibt es eine Möglichkeit, die ich injizieren kann, ohne sie in eine Klasse mit einer Schnittstelle zu wickeln (so können sie automatisch verkabelt werden). Der folgende Codeausschnitt zeigt, was würde ich erreichen möchte:Nicht primative Typen injizieren, ohne sie in eine Struktur in StructureMap einzubinden

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

      }); 

Dieses Beispiel läuft, aber nicht mit der Ausnahme:

StructureMap Ausnahmecode: 202 Nein für PluginFamily System.DateTime definiert Standardinstanz

Danke, Nic

EDIT:

Freddy Rios Lösung funktionierte perfekt für das, was ich brauchte. Ich bin immer noch neugierig, ob es eine Methode gibt, dies zu tun, wenn ich einige Konstruktorargumente automatisch verdrahte (daher konnte ich ConstructedBy() nicht verwenden)

+0

... nur das gleiche Problem. – ozczecho

Antwort

1

Wenn Sie bereits alle Argumente an den Konstruktor übergeben, könnten Sie verwenden ConstructedBy stattdessen:

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