2009-04-01 5 views
0

Ich musste vor kurzem eine relativ große Steuerbibliothek aktualisieren, die Ninject 1.0 zu Ninject 2.0 verwendet, um einige Probleme zu lösen, die ich mit 1.0 hatte. Das Update ist gut gelaufen und ich denke Ninject 2.0 ist viel schneller.Inversion der Steuerung für Ihre Inversion des Steuercontainers?

Um dieses Problem in Zukunft zu vermeiden, habe ich meine eigene Schnittstelle für das Einfügen von Feldern und Eigenschaften erstellt (die im Wesentlichen Methoden auf dem IOC-Container aufrufen, den ich in der aktuellen Webanwendung verwenden möchte). Jetzt ist meine Kontrollbibliothek unabhängig von einem bestimmten IOC-Container, der Änderungen in diesem Bereich in der Zukunft beschleunigen wird.

Ich fragte mich, ob jemand anderes das Gleiche getan hat?

Ich bin glücklich mit dem, was es erreicht hat, aber im Idealfall möchte ich es aktualisieren. In meinen Steuerelementen erzeuge ich diese injizierten Felder oft als geschützt und setze sie im Konstruktor für dieses Steuerelement.

IBlogService _blogService = null; 
IEmailService _emailService = null; 

public Templates_BlogTemplate() 
{ 
    Inject(ref _blogService); 
    Inject(ref _emailService); 
} 

Das Problem, das ich mit dem oben haben, ist, dass ich auf alle Objekte verwenden „ref“ tatsächlich die Eigenschaft auf, und ich kann das nicht direkt auf Eigenschaften verwenden.

Ich würde lieber etwas in diese Richtung tun, aber ich denke nicht, dass es möglich ist.

IBlogService _blogService = null; 
IEmailService _emailService = null; 

public Templates_BlogTemplate() 
{ 
    Inject(_blogService, _emailService); 
} 

Hat jemand irgendwelche Ideen, wie Sie den Code bis vernähen oder es in einer sauberen Art und Weise funktioniert? Ich würde auch Attribute vermeiden wollen, also zwingt es den Entwickler, eine Entscheidung zu treffen, um die Variable an einem bestimmten Punkt innerhalb des Steuerelements zu injizieren.

Alle Gedanken und Gefühle sind willkommen.

Dank

+0

Ich denke, dass nicht Zugriff auf die Konstruktion von Benutzersteuerelementen (nicht in der Lage zu ändern, wie der Konstruktor aufgerufen wird) ist eine der nervigen Dinge über ASP.NET-Benutzersteuerelemente. Tut mir leid, ich habe keine nützliche Antwort. –

Antwort

1

Unterstützung Eigenschaft Injektion und Abhängigkeiten injizieren, um "dieses".

In meinem Fall, ich habe eine Basisklasse, die StructureMap.BuildUp (this) nennt, und der Benutzer die Kontrolle hätte Eigenschaften wie:

public IBlogService _blogService{get;set;} 
public IEmailService _emailService{get;set;} 

die einzige Linie spezifische ich StructureMap haben in der Basis ist Klasse. Wenn ninject dies ermöglicht, können Sie Ihren Code aufrufen, indem Sie ihm die Steuerinstanz übergeben und die Eigenschaften basierend auf seiner Konfiguration injizieren lassen.

1

Sie möchten bei IServiceLocator aussehen wie von Glenn Block

beschrieben Es ist eine gemeinsame Schnittstelle, die verwendet werden können, auf dem Behälter, ohne dabei eine harte Abhängigkeit Vorteil von IoC zu nehmen.

Verwandte Themen