我对依赖注入还比较陌生,但是很喜欢使用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 注入到委托处理程序中的 ILogger 中?
更新
我认为 Pete 在评论中为我指明了正确的方向(谢谢!)。
我向 HttpsHandler
添加了以下构造函数:
public HttpsHandler()
{
var kernel = new StandardKernel();
var logfactory = kernel.Get<ILoggerFactory>();
this.Logger = logfactory.GetCurrentClassLogger();
}
现在我的记录器(Logger)可以工作了!
我唯一剩下的问题是,这样做是正确的方式,还是一种反模式(anti-pattern)?