2017-06-14 1 views
1

ich einen Dienst in Nancy Schreiben und ich verwende einige Middleware für die Überwachung der Service:Zugang registrierte Objekt in Nancy Startup Klasse

app.UseOwin(buildFunc => 
    { 
     var log = ConfigureLogger(); 
     buildFunc.UseMonitoringAndLogging(log, HealthCheck); 
     buildFunc.UseNancy(); 
    }); 

Die Middleware zu verwenden, um eine HealthCheck() Funktion im Startup definiert so konfiguriert ist, Klasse:

public async Task<bool> HealthCheck() 
    { 
     return await SomeRepo.HealthCheck(); 
    } 

SomeRepo hat eine HealthCheck() Methode, die die Datenbank zugänglich zu bestätigen abfragt ist/reagieren. Aber wie kann man SomeRepo in die Klasse Startup injizieren, oder alternativ auf den Container zugreifen, um SomeRepo aufzulösen?

Antwort

0

An diesem Punkt sind Sie noch in Owin und nicht in der Pipeline Nancy. Auf welchem ​​Host laufen Sie? Wenn Sie aspnetcore verwenden, können Sie Ihre Deps in RegisterServices() Methode registrieren und es wird die Injektion in Ihre Methode behandeln. Sie können Autofac oder StructureMap verwenden, so können Sie Ihren Container mit Nancy sowie this teilen.

+0

Dank - ich habe von TinyIoC bewegt, so SimpleInjector ich Dekorateure registrieren. Ich registriere meinen Repo in 'Startup.cs' im SimpleInjector Container. Nancy hat ein Designprinzip, dass der Container nicht direkt von einem Modul aus zugänglich ist. Als Workaround habe ich den Container in einer öffentlichen statischen Eigenschaft gespeichert, aber ich hätte gerne eine bessere Option. –

+0

Sie können den Container an den BootStapper und die Überschreibung 'GetApplicationContainer()' übergeben, um Ihre Instanz zurückzugeben –