测试中的Autofac RegisterAssemblyTypes

时间:2019-12-13 22:40:24

标签: c# asp.net-core autofac autofac-module hangfire-autofac

在我的Startup类中,我有一个通过autofac用于RegisterAssemblyTypes的方法,如下所示:

public class Startup
{
    public void ConfigureContainer(ContainerBuilder builder)
    {
        builder.RegisterModule(new ApplicationModule());
    }
}

public class ApplicationModule : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder
            .RegisterAssemblyTypes(
                typeof(EventHandler).GetTypeInfo().Assembly)
                .AsClosedTypesOf(typeof(IIntegrationEventHandler<>));
    }
}

从集成测试中调用Autofac类时,建议使用RegisterAssemblyTypes(例如Startup)注册程序集的方法是什么?例如,

public class IntegrationTestApplicationFactory : WebApplicationFactory<Startup>
{ }

我正在使用Autofac 4.9.4。

问题:

如何使用WebApplicationFactory<Startup>Autofac中注册程序集类型?

1 个答案:

答案 0 :(得分:2)

由于文档不完整以及Autofac维护者的支持非常差,我们决定在我们研究所的所有项目中恢复Autofac的使用。

现在,我们使用ASP.NET Core的内置注册,当通过以下两种方法之一调用时,该注册可以按预期工作:

public class IntegrationTestApplicationFactory : WebApplicationFactory<Startup>
{
    protected override IHost CreateHost(IHostBuilder builder)
    {
        // register services here,
        // or in the ConfigureWebHost method
    }

    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.ConfigureServices(services =>
        {
            services.AddTransient<YourServiceType>();
        }
    }
}