.NET中IoC框架Autofac用法讲解
1 前置阅读
在阅读本文章之前,你可以先阅读:
2 简介
autofac与c#语言的结合非常紧密,并学习它非常的简单,也是.net领域最为流行的ioc框架之一。
3 使用
首先,将autofac的nuget软件包安装到您的应用程序中。
autofac
然后,我们通过创建containerbuilder来注册组件。
var builder = new containerbuilder(); builder.registertype<knife>(); builder.registertype<actor>();
接着,可以通过在一个已存在的生命周期上调用 beginlifetimescope() 方法来创建另一个生命周期作用域, 以根容器作为起始。生命周期作用域是可释放的并且追踪组件的释放, 因此确保你总是调用了 "dispose()"" 或者把它们包裹在 "using" 语句内。
using (var scope = container.beginlifetimescope()) { }
最后,在注册完组件并暴露相应的服务后, 你可以从创建的容器或其子生命周期中解析服务. 让我们使用 resolve() 方法来实现:
using (var scope = container.beginlifetimescope()) { var actor = scope.resolve<actor>(); actor.kill(); }
让我们来看看完整代码:
using system; namespace autofac.consoleapp { class program { static void main(string[] args) { var builder = new containerbuilder(); builder.registertype<knife>(); builder.registertype<actor>(); var container = builder.build(); using (var scope = container.beginlifetimescope()) { var actor = scope.resolve<actor>(); actor.kill(); } console.readkey(); } } }
让我们来看看输出结果:
小明用刀杀怪
4 在 asp.net core 中使用
首先,将autofac,autofac.extensions.dependencyinjection的nuget软件包安装到您的应用程序中。
dotnet add package autofac dotnet add package autofac.extensions.dependencyinjection
然后,在program.main中增加.useserviceproviderfactory(new autofacserviceproviderfactory())
public static ihostbuilder createhostbuilder(string[] args) => host.createdefaultbuilder(args) .configurewebhostdefaults(webbuilder => { webbuilder.usestartup<startup>(); }) .useserviceproviderfactory(new autofacserviceproviderfactory());
接着,在startup.configureservices中增加services.addcontrollerswithviews();
public void configureservices(iservicecollection services) { services.addcontrollers(); services.addswaggergen(c => { c.swaggerdoc("v1", new openapiinfo { title = "autofac.webapi", version = "v1" }); }); services.addcontrollerswithviews(); }
接着,在startup.configurecontainer方法中,将knife,actor注册到autofac中containerbuilder。
public void configurecontainer(containerbuilder builder) { builder.registertype<knife>(); builder.registertype<actor>(); }
最后,增加homecontroller,执行actor.kill。
using microsoft.aspnetcore.mvc; using system; namespace autofac.webapi.controllers { [route("[controller]")] [apicontroller] public class homecontroller : controller { private readonly actor actor; public homecontroller(actor actor) { this.actor = actor ?? throw new argumentnullexception(nameof(actor)); } [httpget] public string get() { return actor.kill(); } } }
启动调试,让我们来看看输出结果:
小明用刀杀怪
到此这篇关于.net中ioc框架autofac用法讲解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。