In einer sehr sehr begrenzten Anzahl von Szenarien muss ich von einem unbekannten Typ (zur Kompilierzeit) auf eine Instanz des für diesen Typ registrierten Objekts gehen.Castle Windsor Schwach Typ Factory
Zum größten Teil, ich benutze Fabriken getippt und ich kenne den Typen I bei der Kompilierung lösen will ... so spritze ich ein Func<IMyType>
in einen Konstruktor
... aber in dieser begrenzten Anzahl von Szenarien Um einen direkten Aufruf des Containers zu vermeiden (und somit Windsor aus der Bibliothek zu referenzieren, was ein Anti-Pattern ist, das ich vermeiden möchte), muss ich eine Func<Type,object>
... injizieren, die ich intern haben möchte container.Resolve (type) für den Type-Parameter des Func.
Hat jemand einige Vorschläge für den einfachsten/einfachsten Weg, dies einzurichten?
habe ich versucht, die folgenden, aber mit diesem Setup, ich am Ende ganz die regelmäßigen TypedFactoryFacility Umgehung auf die definitiv nicht das, was ich will:
Kernel.Register(Component.For(typeof (Func<Type, object>)).LifeStyle.Singleton.UsingFactoryMethod(
(kernel, componentModel, creationContext) =>
kernel.Resolve(/* not sure what to put here... */)));
Vielen Dank im Voraus für jede Hilfe.
Ich entschied mich, eine Instanz eines einfachen IServiceProvider zu injizieren, der eine Func übernimmt. Gibt es irgendwelche Bedenken? –
Jeff
Wie unterscheidet sich das von der direkten Verwendung der Funktion? Bedenken beziehen sich auf das Leben. Denken Sie darüber nach, wann die Objekte, die Sie ziehen, freigegeben werden und wenn Sie keine Speicherlecks einführen. Das ist alles –
Nicht anders, du hast Recht. – Jeff