У меня есть некоторые проблемы с Зарегистрировать мои интерфейсы.У меня есть следующие интерфейсы:
public interface IMapper<Q, T> { /* Mapper Helper Methods */ }
public interface ISourceObject { /* Properties */ }
public interface ITargetObject { /* Properties */ }
Реализации:
public class GenericMapper<Q, T> : IMapper<Q,T> { /* Mapper Helper Methods */ }
public class SourceObject : ISourceObject { /* Properties */ }
public class TargetObject : ITargetObject { /* Properties */ }
В моем модуле Autofac я хочу зарегистрировать его следующим образом:
builder.RegisterType<GenericMapper<SourceObject, TargetObject>>().As<IMapper<ISourceObject, ITargetObject>>();
Иразрешите его с помощью:
Container.Resolve<IMapper<ISourceObject, ITargetObject>>();
Конфигурация профиля Automapper:
CreateMap<ISourceObject, ITargetObject>()
// ForMember Mappings
.ForAllMembers(o => o.Condition((src, dest, value) => value != null));
Когда я запускаю свой Unittest, он падает со следующей трассировкой стека:
at Autofac.Builder.RegistrationBuilder.CreateRegistration(Guid id, RegistrationData data, IInstanceActivator activator, IEnumerable`1 services, IComponentRegistration target)
at Autofac.Builder.RegistrationBuilder.CreateRegistration[TLimit,TActivatorData,TSingleRegistrationStyle](IRegistrationBuilder`3 builder)
at Autofac.Builder.RegistrationBuilder.RegisterSingleComponent[TLimit,TActivatorData,TSingleRegistrationStyle](IComponentRegistry cr, IRegistrationBuilder`3 builder)
at Autofac.RegistrationExtensions.<>c__DisplayClass3_0`1.<RegisterType>b__0(IComponentRegistry cr)
at Autofac.ContainerBuilder.Build(IComponentRegistry componentRegistry, Boolean excludeDefaultModules)
at Autofac.ContainerBuilder.Build(ContainerBuildOptions options)
System.ArgumentException:
System.ArgumentException: The type 'App.Test.Models.GenericMapper`2[App.Test.Models.SourceObject,App.Test.Models.TargetObject]' is not assignable
to service 'App.Test.Models.IMapper`2[[App.Test.Models.ISourceObject, App.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],
[App.Test.Models.ITargetObject, App.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'..
Что я здесь не так?Когда я регистрирую реализации, решение работает без проблем.Но это было бы жестко связано с реализациями, и это, я не хочу.Могу ли я решить эту проблему таким образом, или мне нужно использовать версию с проводным подключением?