【问题标题】:Dependency Injection: The type SimpleTraceWriter must derive from ITraceWriter依赖注入:SimpleTraceWriter 类型必须从 ITraceWriter 派生
【发布时间】:2015-07-07 09:09:28
【问题描述】:

我正在使用 Ninject 进行 DI。其中一行给了我一个奇怪的错误:

The type SimpleTraceWriter must derive from ITraceWriter.
Parameter name: service

{"The type SimpleTraceWriter must derive from ITraceWriter.\r\nParameter name: service"}

给出错误的代码行:

config.Services.Replace(typeof(ITraceWriter), new SimpleTraceWriter(WebContainerManager.Get<ILogManager>()));

但 SimpleTraceWriter 实现了 ITraceWriter:

SimpleTraceWriter 代码:

 public class SimpleTraceWriter : ITraceWriter
    {
        private readonly ILog _log;

        public SimpleTraceWriter(ILogManager logManager)
        {
            _log = logManager.GetLog(typeof(SimpleTraceWriter));
        }

        public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
        {
            var rec = new TraceRecord(request, category, level);
            traceAction(rec); WriteTrace(rec);
        }

...

ITraceWriter 代码:

public interface ITraceWriter
{   
    void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction);
}

【问题讨论】:

  • 您确定在您的配置中您没有引用来自不同命名空间的ITraceWriter
  • 是的,我做得很快 我选择了错误的命名空间Newtonsoft.Json.Serialization 而不是System.Web.Http.Tracing; 谢谢大家:)

标签: c# dependency-injection ninject asp.net-web-api2


【解决方案1】:

在 System.Web.Http.Tracing 命名空间中还有另一个 ITraceWriter 接口。尝试在该行中指定命名空间,这会导致错误:

config.Services.Replace(typeof(MyNamespace.ITraceWriter), new SimpleTraceWriter(WebContainerManager.Get<ILogManager>()));

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多