У меня возникли проблемы с настройкой 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 ...
Кто-нибудь из вас, ребята, знает, как это исправить?
С наилучшими пожеланиями, Рик
Thanx, это исправлено! – rdvanbuuren