我遇到了通过XML配置配置Unity 3.0的一些问题。解析泛型类型将给出以下异常消息:
INLog`1类型没有可访问的构造函数。
这是我的日志记录类的布局:
namespace Common.Utils.Logging {
public interface INLog
{
}
public interface INLog<T> : INLog where T : class
{
}
public class NLog : INLog
{
public NLog(Type type)
{
}
}
public class NLog<T> : NLog, INLog<T>
where T : class
{
public NLog()
: base(typeof(T))
{
}
}
}
我使用此XML代码注册泛型类型:
<type type="Common.Utils.Logging.INLog[], Common.Utils" mapTo="Common.Utils.Logging.NLog[], Common.Utils" />
加载此配置会为我提供以下容器注册:
LifetimeManager: {Microsoft.Practices.Unity.TransientLifetimeManager} LifetimeManagerType: {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"} MappedToType: {Name = "NLog[]" FullName = "Common.Utils.Logging.NLog[]"} Name: null RegisteredType: {Name = "INLog[]" FullName = "Common.Utils.Logging.INLog[]"}
而不是我期待的注册,即:
LifetimeManager: null LifetimeManagerType: {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"} MappedToType: {Name = "NLog`1" FullName = "Common.Utils.Logging.NLog`1"} Name: null RegisteredType: {Name = "INLog`1" FullName = "Common.Utils.Logging.INLog`1"}
在代码中注册工作正常并提供预期的注册:
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType(typeof(INLog<>), typeof(NLog<>));
}
但是我无法通过配置文件正确加载它。 我想这必须与非泛型类型的继承(I)NLog ...
你们其中任何人都知道如何解决这个问题吗?
祝你好运, 瑞克
答案 0 :(得分:1)
尝试使用此代替[]
符号
<type type="Common.Utils.Logging.INLog`1, Common.Utils" mapTo="Common.Utils.Logging.NLog`1, Common.Utils" />
我知道,感觉很尴尬,但它应该有用。