我正在使用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
}
}
答案 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
}
}