加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Automapper Custom Resolver – 将Repository注入构造函数

发布时间:2020-12-16 01:38:27 所属栏目:百科 来源:网络整理
导读:我正在尝试为automapper创建一个自定义解析器,它需要访问我的一个数据存储库来检索登录的用户帐户. 这是我到目前为止的代码…… public class FollowingResolver : ValueResolverAudio,bool { readonly IIdentityTasks identityTasks; public FollowingResol
我正在尝试为automapper创建一个自定义解析器,它需要访问我的一个数据存储库来检索登录的用户帐户.

这是我到目前为止的代码……

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

我尝试添加一个默认的contrstructor,但我的存储库永远不会被初始化.

这是我的autoampper初始化代码:

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

            Mapper.AssertConfigurationIsValid();
        }

我错过了什么,甚至可能这样做,还是我错过了这里的船?

解决方法

在尝试注入服务时,使用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();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读