在DI Container中为所有控制器分配一个寄存器

时间:2017-11-07 15:39:59

标签: .net-core autofac

我有一个相当简单的问题,我现在在.net core 2.0下测试Autofac DI容器,例如我有一个控制器

public class ValuesController : Controller
{
    private readonly ITestModel _testModel;

    public ValuesController(ITestModel testModel)
    {
        _testModel = testModel;
    }
}

在启动时注册了DI:

    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        var builder = new ContainerBuilder();

        builder.RegisterType<TestModel>().As<ITestModel>();
        builder.Populate(services);
        var container = builder.Build();

        return container.Resolve<IServiceProvider>();
    }

它工作正常,但我一直在想,如果生病了,有20个控制器和20多个带有带某些接口的参数的构造函数的逻辑类,我需要以相同的方式注册它们,它会马上变得非常丑陋。所以我的问题是,是否可以在此环境中注册所有仅具有接口作为参数的控制器和类?

2 个答案:

答案 0 :(得分:0)

正如评论所述,汇编扫描但所有引用(当然通过界面过滤),汇编确实按计划工作。

答案 1 :(得分:0)

            builder
            .RegisterAssemblyTypes(typeof(HomeController).Assembly)
            .AssignableTo<Controller>()
            .InstancePerLifetimeScope()
            .PropertiesAutowired();           

请务必在您的项目中引用控制器(在这种情况下为HomeController

ref