Automapper Custom Resolver - вставить репозиторий в конструктор - PullRequest
4 голосов
/ 30 сентября 2010

Я пытаюсь создать настраиваемый распознаватель для autopper, которому требуется доступ к одному из моих репозиториев данных, чтобы получить доступ к учетной записи пользователя.

Вот мой код ...

public class FollowingResolver : ValueResolver<Audio, bool>
    {
        readonly IIdentityTasks identityTasks;

        public FollowingResolver(IIdentityTasks identitTasks)
        {
            this.identityTasks = identitTasks;
        }

        protected override bool ResolveCore(Audio source)
        {
            var user = identityTasks.GetCurrentIdentity();
            if (user != null)
                return user.IsFollowingUser(source.DJAccount);

            return false;
        }
    }

Однако я получаю эту ошибку:

FollowingResolver' does not have a default constructor

Я попытался добавить конструктор по умолчанию, но мой репозиторий никогда не инициализировался.

Это мой код инициализации autoampper:

public static void Configure(IWindsorContainer container)
        {
            Mapper.Reset();
            Mapper.Initialize(x =>
            {
                x.AddProfile<AccountProfile>();
                x.AddProfile<AudioProfile>();
                x.ConstructServicesUsing(container.Resolve);
            });

            Mapper.AssertConfigurationIsValid();
        }

Я что-то упускаю, можно ли вообще так сделать или я здесь скучаю?

Ответы [ 2 ]

4 голосов
/ 27 октября 2013

Я получал ту же ошибку при использовании Castle Windsor при попытке ввести службу.

Мне пришлось добавить:

Mapper.Initialize(map =>
{
    map.ConstructServicesUsing(_container.Resolve);
});

перед Mapper.CreateMap вызовами.

Создано ValueResolverInstaller как это:

public class ValueResolverInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly()
                                .BasedOn<IValueResolver>()
                                .LifestyleTransient());
    }
}

и сам ValueResolver:

public class DivergencesResolver : ValueResolver<MyClass, int>
{
    private AssessmentService assessmentService;

    public DivergencesResolver(AssessmentService assessmentService)
    {
        this.assessmentService = assessmentService;
    }

    protected override int ResolveCore(MyClass c)
    {
        return assessmentService.GetAssessmentDivergences(c.AssessmentId).Count();
    }
}
3 голосов
/ 30 сентября 2010

Нашел краткость решения после ... я забыл добавить свои преобразователи в качестве контейнера IoC.

Отлично работает сейчас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...