2017-02-28 3 views
1

Ich bin auf der Suche nach einem Weg, dass ich einen konkreten Typ mit einem bestimmten Lebensstil, im Wesentlichen etwas wie folgt registrieren kann.Simple Injector Register Betontyp mit Lifestyle

public void SomeFunction(Type concrete, Lifestyle lifestyle) => 
    container.Register(concrete, lifestyle); 
+0

weitere Informationen benötigt – r3wt

+0

Ich habe bereits ein Beispiel für den Code zur Verfügung gestellt, was ich suche zu tun , es gibt keine passende Signatur in SimpleInjector. Ich kann nicht wirklich mehr Informationen liefern, es sei denn, Sie können klären, worüber Sie mehr Informationen benötigen. –

Antwort

2

Wenn es eine einzige Eins-zu-Eins-Abbildung in der Einfachen Injector zu machen, gibt es praktisch nur eine Methode:

Container.Register(Type serviceType, Type implementationType, Lifestyle lifestyle); 

Alle anderen Methoden sind nur bequem ov Erlaubt oder "Shortcuts" zu dieser Methode. Das folgende Verfahren zum Beispiel:

Container.Register<TService, TImplementation>(Lifestyle) 

fällt schließlich zurück in die nicht-generischen Überlastung durch Register(typeof(TService), typeof(TImplementation), lifestyle) aufrufen.

Das gleiche gilt für Überlastungen, die in einem Lifestyle nicht nehmen:

Container.Register<TService, TImplementation>() 

Sie nur vorwärts der Anruf von der bestimmten Lebensstil für die gegebene Implementierung Typ liefert, die -unter Standard configuration- ist der vorübergehender Lebensstil: Register<TService, TImpementation>(Lifestyle.Transient).

Und es gibt mehrere Überladungen, die eine Verknüpfung Registrierung für Betontypen ermöglichen, wie zum Beispiel:

Container.Register<TConcrete>() 

Diese Methode um den Anruf zu Register<TConcrete, TConcrete>() weiterleitet. Mit anderen Worten, TConcrete wird für TService und TImplementation geliefert. Dieser Anruf endet schließlich als Register(typeof(TConcrete), typeof(TConcrete), Lifestyle.Transient).

So lange Geschichte kurz, lassen Sie die folgenden Methoden Sie einen konkreten Typ mit einem Lebensstil registrieren:

Register<TConcrete>(Lifestyle.Scoped) 
Register<TConcrete, TConcrete>(Lifestyle.Scoped) 
Register(typeof(Concrete), typeof(Concrete), Lifestyle.Scoped); 
0

Diese Arbeit sollte

container.Register<SomeConcreteType,SomeConcreteType>(Lifestyle.Scoped); 

Der Lebensstil ist eine davon: Vorübergehende, Scoped oder Singleton

+0

Vielleicht möchten Sie sich die Frage noch einmal ansehen. Das Codebeispiel verwendet einen Type nicht Generics. –

Verwandte Themen