Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Dependency Injection Service an Child-Objekt übergeben
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

Dependency Injection Service an Child-Objekt übergeben

beantworten | zitieren | melden

Hey Leute,

Ich habe scheinbar gerade ne echte Blockade vor dem Kopf was Dependency Injection angeht.
Und zwar stelle ich mir die Frage wie ich am besten bei einem Child-Objekt verschiedene Services injiziere, ohne dass diese im Parent Objekt verwendet werden.

Beispielcode:

public class Person
{
    private IDummyInterfaceOne _interfaceA;
    private IList<Haus> _haeuser;


	public Person(IDummyInterfaceOne interfaceA)
	{
        this._interfaceA = interfaceA;

        this._haeuser = new List<Haus>();
        for (int i = 0; i < 10; i++)
        {
            this._haeuser.Add(new Haus());  // Von wo kommt das IDummyInterfaceTwo?
        }

	}


}


public class Haus
{
    private IDummyInterfaceTwo _interfaceB;

    public Haus(IDummyInterfaceTwo interfaceB)
    {
        this._interfaceB = interfaceB;
    }
}

Person ist das Objekt welches schlussendlich mehrere Häuser instanzieren soll.
Die beiden Services 'IDummyInterfaceOne' und 'IDummyInterfaceTwo' sind im DI-Container vorhanden.

Per se fallen mir jetzt zwei Möglichkeiten ein, bin mir aber nicht wirklich sicher ob diese auch der richtige Weg sind.

1) IDummyInterFaceTwo im Person Konstruktor deklarieren, und dann einfach weiter runtergeben
-> Wird aber bei mehreren Services / Interfaces dann auch unsauber, und vorallem verlangt dann mein Person-Objekt Services die es eigentlich (von sich aus) ja auch gar nicht benötigt (sondern nur an das Haus Objekt weitergibt).

2) Ich rufe den (statischen Container) auf und hole von dort jeweils den Service.


Gibts etwas was ich da nicht ganz verstanden oder bedacht habe?

Merci & Gruess,
Dani
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 985

beantworten | zitieren | melden

Die Klasse Person braucht zur Erfüllung aller Aufgaben beide Interfaces, also muss diese Klasse auch beide bekommen.

Eine andere Möglichkeit wäre es, wenn du einen Kontext definierst.


public class Context
{
    private readonly IServiceLocator _services;

    public Context( IServiceLocator services )
    {
        _services = services;
    }

    public IPersonService PersonService => _services.GetService<IPersonService>();
    public IHausService HausService => _services.GetService<IHausService>();
}

public abstract class ContextModel
{
    private readonly Context _context;
    public ContextModel( Context context )
    {
        _context = context;
    }

    public Context Context => _context;
}

public class Person : ContextModel
{
}

public class Haus : ContextModel
{
}
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Deaktiviertes Profil am .
private Nachricht | Beiträge des Benutzers