2013-09-12 5 views
0

У меня возникли проблемы с настройкой Unity 3.0 через конфигурацию XML. Разрешение типового типа даст мне следующее сообщение об исключении:Unity не может загрузить определение общего типа через xml-конфигурацию

Тип 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 ...

Кто-нибудь из вас, ребята, знает, как это исправить?

С наилучшими пожеланиями, Рик

ответ

1

Попробуйте вместо [] нотации

<type type="Common.Utils.Logging.INLog`1, Common.Utils" mapTo="Common.Utils.Logging.NLog`1, Common.Utils" /> 

неловко, я знаю, но он должен работать.

+0

Thanx, это исправлено! – rdvanbuuren

Смежные вопросы