Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core Autofac和Automapper-已注册但未解析配置文件_Asp.net Core_Automapper_Autofac - Fatal编程技术网

Asp.net core Autofac和Automapper-已注册但未解析配置文件

Asp.net core Autofac和Automapper-已注册但未解析配置文件,asp.net-core,automapper,autofac,Asp.net Core,Automapper,Autofac,我有一个ASP.NET核心应用程序,它使用Autofac注入Automapper 首先,我正在尝试从程序集注册Automapper配置文件: builder.RegisterAssemblyTypes(assembly) .AssignableTo<Profile>() .OnActivated(e => System.Diagnostics.Debug.WriteLine(e.Instance.GetType())) .AutoActivate();

我有一个ASP.NET核心应用程序,它使用Autofac注入Automapper

首先,我正在尝试从程序集注册Automapper配置文件:

builder.RegisterAssemblyTypes(assembly)
    .AssignableTo<Profile>()
    .OnActivated(e => System.Diagnostics.Debug.WriteLine(e.Instance.GetType()))
    .AutoActivate();
builder.RegisterAssemblyTypes(程序集)
.可转让给
.OnActivated(e=>System.Diagnostics.Debug.WriteLine(e.Instance.GetType()))
.AutoActivate();
我引入了一些调试日志来检查我的配置文件是否已注册。它工作了,我在调试窗口中看到我的配置文件

然后我注册Automapper并尝试解析以前注册的配置文件:

builder.Register(ctx => new MapperConfiguration(cfg =>
    {
        var resolvedProfiles = ctx.Resolve<IEnumerable<Profile>>(); // Length is 0
        foreach(var resolvedProfile in resolvedProfiles)
        {
            cfg.AddProfile(resolvedProfile);
        }
    }).CreateMapper())
    .SingleInstance();
builder.Register(ctx=>newmapperconfiguration(cfg=>
{
var resolvedProfiles=ctx.Resolve();//长度为0
foreach(resolvedProfile中的var resolvedProfile)
{
cfg.AddProfile(resolvedProfile);
}
}).CreateMapper())
.SingleInstance();

不幸的是,这并不奏效。Autofac不会解析以前注册的任何配置文件。为什么以及如何修复它?

只需将类型添加到您的注册中(通过
.As()
):

builder.RegisterAssemblyTypes(Assembly.getExecutionGassembly())
.可转让给
.As()
.OnActivated(e=>System.Diagnostics.Debug.WriteLine(e.Instance.GetType()))
.AutoActivate();

有。我知道,但是当我使用Autofac作为IoC容器时,它会工作吗?我相信你可以用Autofac替换默认的DI引擎,并使用相同的接口。这就解决了它。谢谢。
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                .AssignableTo<Profile>()
                .As<Profile>()
                .OnActivated(e => System.Diagnostics.Debug.WriteLine(e.Instance.GetType()))
                .AutoActivate();