ASP.NET Core 内置的服务容器意图在于提供框架的基本需求,使大多数客户应用程序建立在它之上。

当然,开发人员也可以很容易地使用他们的首选容器替换默认容器。ConfigureServices 方法通常返回 void,但是如果改变它的签名返回 IServiceProvider,就可以配置并返回一个不同的容器。

在开发过程中有很多 IOC 容器可供选择,这里就是一个使用 Autofac 包实现的例子。

1.在项目中安装 Autofac

Install-Package Autofac
Install-Package Autofac.Extensions.DependencyInjection

2.在 ConfigureServices 中配置容器并返回 IServiceProvider

public class Startup
{
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
      // Add Autofac
      var containerBuilder = new ContainerBuilder();
      containerBuilder.Populate(services);
      containerBuilder.RegisterModule<AutofacModule>();
      Startup.AutofacContainer = containerBuilder.Build();
      return new AutofacServiceProvider(Startup.AutofacContainer);
    }

    public static IContainer AutofacContainer { get; set; }
}

注意: Populate 方法和 RegisterModule 的顺序,它们都是在 Aotofac 容器中注册服务,在配置过程中,相同的接口会被后注册的服务覆盖。

3.在 AutofacModule 中配置 Autofac

public class AutofacRepository : IRepository
{
    public string GetInfo()
    {
        return "autofac!";
    }
}

public class AutofacModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<AutofacRepository>().As<IRepository>();
    }
}

4.使用和测试

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.Map("/autofac", autofacApp => {
        autofacApp.Run(async (context) => {
            var info = Startup.AutofacContainer.Resolve<IRepository>().GetInfo();
            await context.Response.WriteAsync(info);
        });
    });
}

其他

在运行时,Autofac 将被用来解析类型和注入依赖关系。 了解更多有关使用 Autofac 和 ASP.NET Core

全部评论

发一条友善的评论... 取消回复

提醒 : 您所填写的邮箱地址不会被公开!

看不清?点击更换