Ich schreibe den Windows-Dienst Listner für Active MQ. Ich versuche Dependency Injection im Projekt zu implementieren. Aber ich bin mir nicht sicher, wo Container registriert werden und wie es gelöst wird?Verwenden von Windsor Castle IoC für Windows-Dienst
Ich habe versucht, es in OnStart Methode wie folgt zu setzen, aber kein Glück.
protected override void OnStart(string[] args)
{
container = new WindsorContainer();
// IWindsorContainer container = new WindsorContainer();
//container.Install(FromAssembly.This());
container.Register(
Component.For<IHttpClientProxyHandler>().ImplementedBy<HttpClientProxyHandlerWeb>().LifestyleTransient(),
Component.For<IHttpClientProxy>().ImplementedBy<HttpClientProxyWeb>().LifestyleTransient(),
//Component.For<IRedisCacheClient>().ImplementedBy<RedisCacheClient>().LifestyleTransient(),
Component.For<IApplicationSettings>().ImplementedBy<ApplicationSettings>().LifeStyle.PerWebRequest,
Component.For<ILogger>().ImplementedBy<Logger>().LifeStyle.PerWebRequest
);
this.messagingQueue = new ActiveMessagingQueue(new ApplicationSettings(), new Logger());
this.logger = new Logger();
this.applicationSettings = new ApplicationSettings();
this.httpClientProxyHandler = container.Resolve<IHttpClientProxyHandler>();
this.messagingQueue.OnMessageReceived += this.OnListenerMessage;
}
Dann habe ich versucht, in ServiceBase Constructor setzen - kein Glück. Sogar versucht, es in Hauptfunktion zu setzen. Aber immer unter Fehler immer im Ereignislogger.
‚Namespace.HttpClient.HttpClientProxyHandler‘ wartet auf die folgenden Abhängigkeiten: - Service ‚Castle.Windsor.IWindsorContainer‘, die nicht registriert wurde.
Kann mir hier jemand helfen?
Versuchen Sie, IKernel anstelle von IWindsorContainer zu verwenden. Und im Allgemeinen möchten Sie den Container/Kernel nicht an Ihre Implementierungen weitergeben ... –