异常是:InvalidOperationException - 当前类型log4net.ILog是一个接口,无法构造。你错过了类型映射吗?

时间:2017-12-13 17:08:30

标签: c# unity-container

我正在使用unity-container。我已将我的类注册到IOC容器。当我尝试创建Auth类的实例时,我遇到以下异常: 异常是:InvalidOperationException - 当前类型log4net.ILog是一个接口,无法构造。你错过了类型映射吗?

如果我做错了,请告诉我?

我的代码:

    using Unity;
    Public Main()
    {
     private readonly IUnityContainer container;
     public override void Instantiate()
     {
       container.RegisterSingleton<IAuthentication, Auth>("Auth");
     }

     public Authenticate()
     {
       var instance = container.Resolve<IAuthentication>("Auth");**//Getting exception here**
     }
    }

Auth课程:

    public class Auth: IAuthentication
    {
      private readonly ILog log;
      private IImpID impIDobj;
      public Auth(ILog log, IImpID impIDobj)
        {
            this.impIDobj= impIDobj;
            this.log = log;
        }

        public Auth()
            : this(LogManager.GetLogger("Auth"), new CAuth())
        {
        }
        public Authenticate()
        {
          impIDobj.Authenticate(data);
         //Some logics
        }
    }

2 个答案:

答案 0 :(得分:1)

Container不知道ILog的类型是什么,并且无法创建Auth的实例。 请提供ILog的类型,在Instantiate方法中添加此行。

  

container.RegisterSingleton<ILog, yourOwnLogType>();

答案 1 :(得分:0)

感谢各位的反馈。但我能用#34; InjectionConstructor&#34;来解决这个问题。更多信息是here

我的新Auth课程:

 public class Auth: IAuthentication
{
  private readonly ILog log;
  private IImpID impIDobj;
  public Auth(ILog log, IImpID impIDobj)
    {
        this.impIDobj= impIDobj;
        this.log = log;
    }

    [InjectionConstructor]
    public Auth()
        : this(LogManager.GetLogger("Auth"), new CAuth())
    {
    }
    public Authenticate()
    {
      impIDobj.Authenticate(data);
     //Some logics
    }
}