欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET中IoC框架Autofac用法讲解

程序员文章站 2022-03-10 13:12:12
1 前置阅读在阅读本文章之前,你可以先阅读: 2 简介autofac与c#语言的结合非常紧密,并学习它非常的简单,也是.net领域最为流行的ioc框架之一。3 使用首先,将autofac的nug...

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用法讲解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。