私は依存性注入に慣れていませんが、必要な場所に満足していますNinject
。Ninject.Extensions.Logging
[Inject]
ILogger
ただし、一部のDelegatingHandlersはすべての楽しみを台無しにしています。
public class HttpsHandler : DelegatingHandler
{
[Inject]
public ILogger Logger { get; set; }
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
if (!string.Equals(request.RequestUri.Scheme, "https", StringComparison.OrdinalIgnoreCase))
{
Logger.Info(String.Format("{0}: is using HTTP", request.RemoteAddress());
return
Task.Factory.StartNew(
() =>
new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent("HTTPS Required")
});
}
return base.SendAsync(request, cancellationToken);
}
}
Ninject.Extensions.Logger.Nlog2 を delegatinghandler 内の Ilogger に注入する方法について、誰かが私を正しい方向に向けることができますか?
アップデート
ピートはコメントで私を正しい方向に導いてくれたと思います (ありがとう!)。に次のコンストラクターを追加しましたHttpsHandler
。
public HttpsHandler()
{
var kernel = new StandardKernel();
var logfactory = kernel.Get<ILoggerFactory>();
this.Logger = logfactory.GetCurrentClassLogger();
}
そして今、ロガーが機能しています!
私の唯一の質問が残っています。これは正しい方法ですか、それともアンチパターンですか?