gpt4 book ai didi

c# - 无法使用带有 Autofac 的 AutoMapper 4.2 解析 AutoMapper.IMapper

转载 作者:太空狗 更新时间:2023-10-30 00:30:31 27 4
gpt4 key购买 nike

我已经尝试了各种排列,但我当前的配置(因为它与 AutoMapper 相关)是这样的:

builder.RegisterAssemblyTypes().AssignableTo(typeof(Profile)).As<Profile>();

builder.Register(c => new MapperConfiguration(cfg =>
{
foreach (var profile in c.Resolve<IEnumerable<Profile>>())
{
cfg.AddProfile(profile);
}
})).AsSelf().SingleInstance();


builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();

builder.RegisterType<MappingEngine>().As<IMappingEngine>();

我有一个使用 IMapper 映射器 的构造函数,但是我继续得到 YSOD:

None of the constructors found with'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'
on type '' can be invoked with the available services and parameters:
Cannot resolve parameter 'AutoMapper.IMapper mapper' of constructor
'Void .ctor(...,...,..., AutoMapper.IMapper)'.

这个类在没有自动映射器引用的情况下工作得很好,所以我确信问题出在我的自动映射器配置上。

我不确定我在这里遗漏了什么,因为我对 AutoFac 和 AutoMapper 都很陌生。

编辑:

我也试过:

builder.Register(c => new MapperConfiguration(cfg =>
{
cfg.CreateMap<IdentityUser, AspNetUser>().ReverseMap();
})).AsSelf().SingleInstance();

builder.Register(ctx => ctx.Resolve<MapperConfiguration>().CreateMapper()).As<IMapper>();
//I've tried both of these lines separately, neither work
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();

我也尝试过根据评论中的建议手动添加配置文件

最佳答案

正如我在评论中提到的,您的 AutoFac 代码似乎是正确的(程序集扫描部分除外)。

我创建了以下测试应用程序,它确实在没有任何异常的情况下运行,并将 3 放入输出窗口(如预期的那样):

using System.Diagnostics;
using Autofac;
using AutoMapper;

namespace Sandbox
{
public partial class App
{
public App()
{
var builder = new ContainerBuilder();
builder.Register(
c => new MapperConfiguration(cfg =>
{
cfg.AddProfile(new TestProfile());
}))
.AsSelf()
.SingleInstance();

builder.Register(
c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve))
.As<IMapper>()
.InstancePerLifetimeScope();

builder.RegisterType<MappingEngine>()
.As<IMappingEngine>();

builder.RegisterType<Test>().AsSelf();

var container = builder.Build();
container.Resolve<Test>();
}
}

public class TestProfile : Profile
{
protected override void Configure()
{
CreateMap<Source, Destination>();
}
}

public class Test
{
public Test(IMapper mapper)
{
var source = new Source { Id = 3 };
var destination = mapper.Map<Destination>(source);
Debug.Print(destination.Id.ToString());
}
}

public class Source
{
public int Id { get; set; }
}

public class Destination
{
public int Id { get; set; }
}
}

我会建议在版本控制中为您的应用创建一个新分支,然后将其删除直到它可以正常工作。

关于c# - 无法使用带有 Autofac 的 AutoMapper 4.2 解析 AutoMapper.IMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35565524/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com