我在通过 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 的继承有关...
你们中有人知道如何解决这个问题吗?
最好的问候,瑞克