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