.Net Core Autofac

这篇具有很好参考价值的文章主要介绍了.Net Core Autofac。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • Autofac
  • Program.cs
  • AutofacConfig.cs
  • 测试接口+实现
    • IStudent.cs
    • Student.cs

Autofac

Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做 组件 处理.

控制反转背后的核心思想是, 我们不再将应用中的类捆绑在一起, 让类自己去 “new up” 他们的依赖, 而是反过来在类的构造方法中将依赖传递进去.

中文文档

引用

<ItemGroup>
    <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
    <PackageReference Include="Castle.Core" Version="5.1.1" />
</ItemGroup>

Program.cs

//添加 autofac
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
    builder.RegisterModule<AutofacConfig>();
});

AutofacConfig.cs

using Autofac;
using Autofac.Extras.DynamicProxy;
using Cnpc.Com.Ioc.Bll;
using Cnpc.Com.Ioc.Dal;
using Cnpc.Com.Ioc.IBll;
using Cnpc.Com.Ioc.IDal;
using Cnpc.Com.Ioc.Tools;

namespace Cnpc.Com.AutofacTest.Autofac
{
    public class AutofacConfig : Module
    {

        protected override void Load(ContainerBuilder builder)
        {
            //ioc
            builder.RegisterType<Pencil>().As<IWrite>(); //构造函数注入
            builder.RegisterType<Student>().As<IStudent>().PropertiesAutowired(new PropertySelection()).OnActivated(it =>
            {
                it.Instance.SetIWriten(it.Context.Resolve<IWrite>());
            }).EnableInterfaceInterceptors(); //属性注入 + 指定属性注入 + 指定方法注入 + 开启Aop 
            //aop
            builder.RegisterType<AutofacInterceptor>();
            builder.RegisterType<TestAutofacInterceptor>();
        }
    }
}

Aop AutofacInterceptor.cs文章来源地址https://www.toymoban.com/news/detail-622623.html

using Castle.DynamicProxy;
using Microsoft.Extensions.Logging;
using NLog;

namespace Cnpc.Com.Ioc.Tools
{
    public class AutofacInterceptor : IInterceptor
    {
        //支持NOP    
        ILogger<AutofacInterceptor> logger;
        public AutofacInterceptor(ILogger<AutofacInterceptor> logger)
        {
            this.logger = logger;
        }
        public void Intercept(IInvocation invocation)
        {            
            {
                logger.LogInformation("执行前");
                Console.WriteLine("执行前: " + DateTime.Now.ToString() + "此消息来自:" + this.GetType().FullName) ;
            }
            invocation.Proceed();

            {
                Console.WriteLine("执行后: " + DateTime.Now.ToString() + "此消息来自:" + this.GetType().FullName);
            }
        }
    }
}

测试接口+实现

IStudent.cs

using Autofac.Extras.DynamicProxy;
using Cnpc.Com.Ioc.IDal;
using Cnpc.Com.Ioc.Tools;
using Microsoft.Extensions.Logging;

namespace Cnpc.Com.Ioc.IBll
{
    [Intercept(typeof(TestAutofacInterceptor))]
    public interface IStudent
    {
        IWrite Write { get; set; }
        IWrite Write1 { get; set; }
        IWrite Write2 { get; set; }
        IWrite Write3 { get; set; }
        IWrite Write4 { get; set; }
        IWrite Write5 { get; set; }

        ILogger<IStudent> logger { get; set; }

        IWrite Write6 { get; set; }
        IWrite WriteContainer { get; set; }

        void SetIWriten(IWrite write);

        void DoHomeWork(IWrite writen);
        void Calligraphy(IWrite writen);
    }
}

Student.cs

using Autofac.Extras.DynamicProxy;
using Cnpc.Com.Ioc.IBll;
using Cnpc.Com.Ioc.IDal;
using Cnpc.Com.Ioc.Tools;
using Microsoft.Extensions.Logging;
using NLog;

namespace Cnpc.Com.Ioc.Bll
{
    [Intercept(typeof(AutofacInterceptor))]
    public class Student : IStudent
    {
        [PropertySelecction]
        public IWrite Write { get; set ; }
        public IWrite WriteContainer { get ; set ; }
        public IWrite Write1 { get ; set ; }
        public IWrite Write2 { get ; set ; }
        public IWrite Write3 { get ; set ; }
        public IWrite Write4 { get ; set ; }
        public IWrite Write5 { get ; set ; }
        public IWrite Write6 { get ; set ; }
        
         //支持Nlog 属性注入
        [PropertySelecction]
        public ILogger<IStudent> logger { get ; set ; }

        public void Calligraphy(IWrite writen)
        {
            writen.Write();
        }

        public void DoHomeWork(IWrite writen)
        {
            logger.LogInformation("wow");
            writen.Write();
        }

        public void SetIWriten(IWrite write)
        {
            this.WriteContainer = write;
        }
    }
}

到了这里,关于.Net Core Autofac的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .net core 生成项目时.json配置文件没有复制到输出目录

    在程序运行时默认加载.exe文件同文件夹下的配置文件,而不是项目中的.json配置文件,所以需要把.json配置文件设置到自动生成目录,即下图所示:

    2023年04月13日
    浏览(40)
  • .NET 6 整合 Autofac 依赖注入容器

    一行业务代码还没写,框架代码一大堆,不利于学习。 常看到java的学习资料或博客,标题一般为《SpringBoot 整合 XXX》,所以仿照着写了《.NET 6 整合 Autofac 依赖注入容器》这样一个标题。 以下是我自己的用法,可能不是最佳实践。 NuGet搜索并安装: Autofac Autofac.Extensions.Depe

    2023年04月26日
    浏览(29)
  • .Net6 使用Autofac进行依赖注入

    刚接触.net 6,记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的 1、新建一个webapi项目,框架选择net 6 2、引用Nuget包---Autofac.Extensions.Dependency 3、在Program.cs上添加如下代码 4. 或 以及再startup.cs中添加ConfigureContainer方法    public void ConfigureContainer(ContainerBuilder builder)    

    2024年04月11日
    浏览(33)
  • .Net Framework使用Autofac实现依赖注入

    最近也是找了快2周的工作了,收到的面试邀请也就几个,然后有个面试题目是用asp.net mvc + Entityframework 做一个学生信息增删改查系统。因为题目要求了用Entityframework 也就是EF 那也就不上core了,web项目也是用Framework 4.8去做的。 本文的重点是IOC容器,在Framework 中是没有自带的

    2024年02月09日
    浏览(35)
  • .net中优秀依赖注入框架Autofac看一篇就够了

      Autofac 是一个功能丰富的 .NET 依赖注入容器,用于管理对象的生命周期、解决依赖关系以及进行属性注入。本文将详细讲解 Autofac 的使用方法,包括多种不同的注册方式,属性注入,以及如何使用多个  ContainerBuilder 来注册和合并组件。我们将提供详细的源代码示例来说明

    2024年02月05日
    浏览(28)
  • .NET开源IOC内置容器,生命周期管理与Autofac扩展

    大家好,我是行不更名,坐不改姓的宋晓刚,下面将带领大家从基础小白到高阶的.NET的IOC容器依赖与注入,以及IOC内置容器和生命周期,Autofac的学习,跟上我的步伐进入C#的世界。 微信:15319589104 QQ: 2981345658 文章内容: .NET依赖注入容器的生命周期管理,瞬时生命周期(

    2024年01月21日
    浏览(35)
  • 使用Autofac进行服务注册,适用版本.Net6(程序集、泛型)

    具体的也可以去参考官网:https://autofac.readthedocs.io/en/latest/integration/aspnetcore.html 首先在Program.cs所属的层中引用nuget包: nuget网址:https://www.nuget.org/packages  可以使用NuGet包管理器进行搜索安装 在Program.cs中加入如下代码: 代码中SmartHealthcare.Application可以替换为具体自己项目中Ap

    2024年02月16日
    浏览(29)
  • 在net中通过Autofac实现AOP的方法及实例详解

      在本示例中,我们将使用Autofac和AspectC( Autofac.Extras.DynamicProxy2)来演示如何实现AOP(面向切面编程)。我们将创建一个简单的C#控制台应用程序,并应用AOP以解决日志记录的问题。首先,让我们讨论AOP的用途和目标。 AOP是一种编程范式,旨在解决横切关注点(cross-cutting

    2024年02月05日
    浏览(28)
  • .net下优秀的IOC容器框架Autofac的使用方法,实例解析

    Autofac是一个功能强大的依赖注入容器,它提供了一种简单和灵活的方式来管理对象之间的依赖关系。下面是Autofac的一些优点: 简单易用:Autofac提供了一种直观和简洁的方式来注册和解析依赖项。它的API设计得非常易于理解和使用,使得开发人员可以轻松地配置和管理依赖关

    2024年02月05日
    浏览(38)
  • L2CS-Net: 3D gaze estimation

    论文地址:L2CS-Net: Fine-Grained Gaze Estimation in Unconstrained Environments 论文代码:https://github.com/ahmednull/l2cs-net 论文出处:arXiv,2022 论文单位:Otto-von-Guericke-University, Magdeburg, Germany 人类的注视(gaze)是在人机交互和虚拟现实等各种应用中使用的关键线索。 近年来,卷积神经网络

    2024年02月14日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包