ich einige Beispiele tue Injection verstehen ninject mit ...Setter Injection funktioniert nicht
aber endete mit Verwirrung in Injektion up ..
Ex: -
folgendes Beispiel: -
class Busineesss
{
FirstInterface targetInter = null;
[Inject] //Setter Injection
public SecondInterface ProInj { get; set; }
[Inject] //Ctor Injection
public Busineesss(FirstInterface inbound)
{
targetInter = inbound;
}
public void run()
{
/*Line:X*/ targetInter.doSomeThing();
/*Line:Y*/ ProInj.GetSomethingMyName();
}
}
interface FirstInterface
{
void doSomeThing();
}
interface SecondInterface
{
void GetSomethingMyName();
}
Module und Haupt:
public class Module : NinjectModule
{
public override void Load()
{
Bind<FirstInterface>().To<FirstImplementer>();
Bind<SecondInterface>().To<SecondImplementer>();
}
}
static void Main(string[] args)
{
StandardKernel std = new StandardKernel();
std.Load(Assembly.GetExecutingAssembly());
FirstInterface obj = std.Get<FirstInterface>();
Busineesss b = new Busineesss(obj); //Injecting Ctor data here
b.run();
}
Mein Verständnis: - So, wie pro meinem Verständnis, haben wir manuell die Stammklasse mit notwendigen Daten nennen, dann ist die Ninject der verbleibenden Abhängigkeiten von selbst lösen.
- So, dachte ich, dass in der Line: Y, wird die Instanz von SecondImplementer bekommen, da es in dem Modul definiert ist.
Aber ich habe keine dieser Sachen bekommen. Ich bekomme Null Ausnahme nur an der Linie ProInj.GetSomethingMyName().
- Wenn Ninjector ist Pflege der Injektion unter, dann, warum ich die Daten in dem Ctor der Wurzelklasse passieren sollte, in der Linie „Busineesss b = new Busineesss (obj) ", sollte es von sich aus richtig gemacht werden .. So sollte es so sein, müssen wir nur den Namen der Startup-Klasse erwähnen ... Diese Frage ergab sich aus der im Abschnitt "Mein Verständnis" genannten Zeile. ...
Könnte u Freunde helfen mir, diese in das Verständnis, so kann ich ein wenig mehr verstehen ....
Vielen Dank im Voraus ..
Wenn Sie das Objekt selbst "neu" erstellen, kann der Container keine Abhängigkeiten in das Objekt einfügen. Versuchen Sie 'Busineess' aus dem Container zu lösen. – qujck
Und warum verwenden Sie überhaupt Immobilieninjektion? Alle Abhängigkeiten sollten über den Konstruktor eingefügt werden, da Abhängigkeiten nicht optional sein sollten und das Property Injection [temporale Kopplung] verursacht (http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/). – Steven
@Steven: Hi, ich lerne gerade die Dinge. Aber ich werde Ihre Eingabe während der Implementierung haben. Vielen Dank. – NANDAKUMAR