Einheit DI auf einem Windows-Dienst, Ist möglich?

Baue ich einen Windows-Dienst zu tun, einige periodische Vorgänge, kann ich mit Unity zu injizieren meine Klassen aus einer anderen Bibliothek vorhanden?

Ich verwenden möchten, mit der [Abhängigkeit] - Attribut für meine Dienste, die Registrierung der Komponenten auf den Einstiegspunkt der windows-Dienst starten.

Beispiel:

static class Program
{
    static void Main()
    {
         ServiceBase[] ServicesToRun;
         UnityConfig.RegisterComponents();
         ServicesToRun = new ServiceBase[] 
         { 
                new EventChecker()
         };
         ServiceBase.Run(ServicesToRun);
   }
}


public static class UnityConfig
{
    public static void RegisterComponents()
    {
        UnityContainer container = new UnityContainer();
        container.RegisterType<IEventBL, EventBL>();
    }
}

public partial class EventChecker : ServiceBase
{
    private Logger LOG = LogManager.GetCurrentClassLogger();

    [Dependency]
    public Lazy<IEventBL> EventBL { get; set; }

    protected override void OnStart(string[] args)
    {
        var events = EventBL.Value.PendingExecution(1);
    }
}

In diesem Szenario die EventBL immer null ist, so ist nicht gelöst, indem die [Abhängigkeit] der Einheit. Es gibt nicht einen Weg, um es zu arbeiten?

Dank!


Lösung Gefunden:

Nach schreiben der Antwort, die ich fand eine mögliche Lösung, Berufung auf build-up-Methode des Containers zu erstellen, die service-Klasse arbeitet:

    UnityContainer container = new UnityContainer();
    UnityConfig.RegisterComponents(container);

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        container.BuildUp(new EventChecker())
    };
    ServiceBase.Run(ServicesToRun);

Wenn du keine andere Lösung haben, bitte teilen 🙂

InformationsquelleAutor juan25d | 2014-08-05
Schreibe einen Kommentar