iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >.NET Core中怎么使用Autofac
  • 375
分享到

.NET Core中怎么使用Autofac

2023-06-29 05:06:58 375人浏览 八月长安
摘要

今天小编给大家分享一下.net Core中怎么使用Autofac的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Au

今天小编给大家分享一下.net Core中怎么使用Autofac的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Autofac 容器

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

  • 安装 NuGet 程序包: Autofac 6.0.0

  • 创建一个 ContainerBuiler

  • 注册接口和实现关系

  • 通过 ContainerBuiler 的 Build 方法,得到 IContainer 容器

  • 通过 IContainer 容器获取实例

  • 使用服务

  • ITestServiceA 和 TestServiceA

public interface ITestServiceA    {        void Show();    }    public class TestServiceA : ITestServiceA    {        public TestServiceA()        {            Console.WriteLine($"{this.GetType().Name} 被构造了...");        }        public void Show()        {            Console.WriteLine($"This is a {this.GetType().Name} Instance...");        }    }
  • Program 中的 Main 方法

 var builder = new ContainerBuilder(); builder.ReGISterType<TestServiceA>().As<ITestServiceA>(); var container = builder.Build(); // 获取服务实例 var testService = container.Resolve<ITestServiceA>(); testService.Show();

Autofac 多种注入方式

  • ITestServiceB 和 TestServiceB

    public interface ITestServiceB    {        void Show();    }    public class TestServiceB : ITestServiceB    {        private ITestServiceA _testServiceA;        public void SetService(ITestServiceA testServiceA)        {            _testServiceA = testServiceA;        }        public TestServiceB()        {            Console.WriteLine($"{this.GetType().Name} 被构造了...");        }        public void Show()        {            // _testServiceA.Show();            Console.WriteLine($"This is a {this.GetType().Name} Instance...");        }    }
  • ITestServiceC 和 TestServiceC

    public interface ITestServiceC    {        void Show();    }    public class TestServiceC : ITestServiceC    {        public TestServiceC()        {            Console.WriteLine($"{this.GetType().Name} 被构造了...");        }        public void Show()        {            Console.WriteLine($"This is a {this.GetType().Name} Instance...");        }    }
  • ITestServiceD 和 TestServiceD

    public interface ITestServiceD    {        void Show();    }    public class TestServiceD : ITestServiceD    {        public ITestServiceA TestServiceA { get; set; }        public ITestServiceB TestServiceB { get; set; }        public ITestServiceC TestServiceC { get; set; }        public TestServiceD()        {            Console.WriteLine($"{this.GetType().Name} 被构造了...");        }        public void Show()        {            // TestServiceA.Show();            // TestServiceB.Show();            // TestServiceC.Show();            Console.WriteLine($"This is a {this.GetType().Name} Instance...");        }    }
  • 构造函数注入

 var builder = new ContainerBuilder(); builder.RegisterType<TestServiceA>().As<ITestServiceA>(); builder.RegisterType<TestServiceB>().As<ITestServiceB>(); builder.RegisterType<TestServiceC>().As<ITestServiceC>(); builder.RegisterType<TestServiceD>().As<ITestServiceD>(); var container = builder.Build(); // 获取服务实例 var testService = container.Resolve<ITestServiceA>(); testService.Show();
  • 属性注入

 var builder = new ContainerBuilder(); builder.RegisterType<TestServiceA>().As<ITestServiceA>(); builder.RegisterType<TestServiceB>().As<ITestServiceB>(); builder.RegisterType<TestServiceC>().As<ITestServiceC>(); builder.RegisterType<TestServiceD>().As<ITestServiceD>().PropertiesAutowired(); var container = builder.Build(); // 获取服务实例 var testService = container.Resolve<ITestServiceD>(); testService.Show();
  • 方法注入

 var builder = new ContainerBuilder(); builder.RegisterType<TestServiceA>().As<ITestServiceA>(); builder.RegisterType<TestServiceB>().OnActivated(e =>           e.Instance.SetService(e.Context.Resolve<ITestServiceA>()) ).As<ITestServiceB>(); builder.RegisterType<TestServiceC>().As<ITestServiceC>(); builder.RegisterType<TestServiceD>().As<ITestServiceD>(); var container = builder.Build(); // 获取服务实例 var testService = container.Resolve<ITestServiceB>(); testService.Show();

Autofac 生命周期

  • InstancePerDependency :默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象;

var builder = new ContainerBuilder();builder.RegisterType<TestServiceA>().As<ITestServiceA>().InstancePerDependency();var container = builder.Build();var testServiceA = container.Resolve<ITestServiceA>();var testServiceA1 = container.Resolve<ITestServiceA>();Console.WriteLine(object.ReferenceEquals(testServiceA,testServiceA1));
  • SingleInstance :单例模式,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;

var builder = new ContainerBuilder();builder.RegisterType<TestServiceA>().As<ITestServiceA>().SingleInstance();var container = builder.Build();var testServiceA = container.Resolve<ITestServiceA>();var testServiceA1 = container.Resolve<ITestServiceA>();Console.WriteLine(object.ReferenceEquals(testServiceA,testServiceA1));
  • InstancePerLifetimeScope : 同一个生命周期域中,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;且每个不同的生命周期域中的实例是唯一的,不共享的。

var builder = new ContainerBuilder();builder.RegisterType<TestServiceA>().As<ITestServiceA>().InstancePerLifetimeScope();var container = builder.Build();ITestServiceA testServiceA15;ITestServiceA testServiceA16;using (var scope1 = container.BeginLifetimeScope()){    var testServiceA11 = scope1.Resolve<ITestServiceA>();    var testServiceA12 = scope1.Resolve<ITestServiceA>();    Console.WriteLine(object.ReferenceEquals(testServiceA11,testServiceA12));    testServiceA15 = testServiceA12;}using (var scope1 = container.BeginLifetimeScope()){    var testServiceA13 = scope1.Resolve<ITestServiceA>();    var testServiceA14 = scope1.Resolve<ITestServiceA>();    Console.WriteLine(object.ReferenceEquals(testServiceA13,testServiceA14));    testServiceA16 = testServiceA14;}Console.WriteLine(object.ReferenceEquals(testServiceA15,testServiceA16));
  • InstancePerMatchingLifetimeScope : 同一个匹配的生命周期域中,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;且每个不匹配的生命周期域中的实例是唯一的,不共享的。

var builder = new ContainerBuilder();builder.RegisterType<TestServiceA>().As<ITestServiceA>()    .InstancePerMatchingLifetimeScope("Run2948");var container = builder.Build();ITestServiceA testServiceA15;ITestServiceA testServiceA16;using (var scope1 = container.BeginLifetimeScope("Run2948")){    var testServiceA11 = scope1.Resolve<ITestServiceA>();    using (var scope2 = container.BeginLifetimeScope())    {        var testServiceA12 = scope2.Resolve<ITestServiceA>();        Console.WriteLine(object.ReferenceEquals(testServiceA11,testServiceA12));    }    testServiceA15 = testServiceA11;}using (var scope1 = container.BeginLifetimeScope("Run2948")){    var testServiceA13 = scope1.Resolve<ITestServiceA>();    using (var scope2 = container.BeginLifetimeScope())    {        var testServiceA14 = scope2.Resolve<ITestServiceA>();        Console.WriteLine(object.ReferenceEquals(testServiceA13,testServiceA14));    }    testServiceA16 = testServiceA13;}Console.WriteLine(object.ReferenceEquals(testServiceA15,testServiceA16));
  • InstancePerOwned : 在一个所拥有的实例创建的生命周期中,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;(较少使用)

  • InstancePerHttpRequest : 同一次Http请求上下文中,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;仅适用于 asp.net (CORE) mvcWEBFORM 应用程序

Autofac 支持配置文件

  • 安装 NuGet 程序包: Autofac.Extensions.DependencyInjection 7.1.0 、Autofac.Configuration 6.0.0

  • 新建配置文件(指定接口和实现的对应关系) autofac.JSON:

{ "components":[        {            "type: "One.Services.TestServiceA,One",            "services": [            {            "type": "One.Services.ITestServiceA,One"        }            ],    "instanceScope": "single-instance",    "injectProperties": true        },        {            "type: "One.Services.TestServiceB,One",            "services": [            {            "type": "One.Services.ITestServiceB,One"        }            ],    "instanceScope": "single-instance",    "injectProperties": true        },        {            "type: "One.Services.TestServiceC,One",            "services": [            {            "type": "One.Services.ITestServiceC,One"        }            ],    "instanceScope": "single-instance",    "injectProperties": true        },        {            "type: "One.Services.TestServiceD,One",            "services": [            {            "type": "One.Services.ITestServiceD,One"        }            ],    "instanceScope": "single-instance",    "injectProperties": true        }    ]   }
  • 读取配置文件,完成服务对应关系的注册

var builder = new ContainerBuilder();var config = new ConfigurationBuilder();var configSource = new jsonConfigurationSource(){    Path = "Config/autofac.json",    Optional = false,    ReloadOnChange = true};config.Add(configSource); var configModule = new ConfigurationModule(config.Build());builder.RegisterModule(configModule);var container = builder.Build(); // 获取服务实例 var testServiceA = container.Resolve<ITestServiceA>(); var testServiceD = container.Resolve<ITestServiceD>(); testServiceD.Show();
  • 新建 ITestServiceA 的新版实现类 TestServiceUpdate

public class TestServiceUpdate : ITestServiceA{    public TestServiceUpdate()    {        Console.WriteLine($"{this.GetType().Name} 被构造了...");    }    public void Show()    {        Console.WriteLine($"This is a {this.GetType().Name} Instance...");    }}
  • 通过修改配置文件 autofac.json 来实现快速实现 ITestServiceA 的实现的重新定义:

{ "components":[        {            "type: "One.Services.TestServiceUpdate,One",            "services": [            {            "type": "One.Services.ITestServiceA,One"        }            ],    "instanceScope": "single-instance",    "injectProperties": true        },// ...

Autofac 整合 .NET 5 MVC

  • 安装 NuGet 程序包: Autofac.Extensions.DependencyInjection 7.1.0

  • Program文件中指定 Autofac 工厂替换默认工厂:

    public static IHostBuilder CreateHostBuilder(string[] args) =>        Host.CreateDefaultBuilder(args)            .ConfigureWebHostDefaults(webBuilder =>            {              webBuilder.UseStartup<Startup>();            }).UseServiceProviderFactory(new AutofacServiceProviderFactory());
  • 在 Startup 类中增加 ConfigureContainer 方法:

public void ConfigureContainer(ContainerBuilder builder)    {        builder.RegisterType<TestServiceA>().As<ITestServiceA>();    }
  • 通过控制器构造函数注入,获取实例

    [Route("api/[controller]")]    [ApiController]    public class ValuesController : ControllerBase    {        private readonly ITestServiceA _serviceA;        public ValuesController(ITestServiceA serviceA        {            _serviceA = serviceA;        }        [HttpGet]        public IActionResult Get()        {            _serviceA.Show();            return Ok();        }    }
  • 使用 IServiceCollection 注册的服务,将来也会交给 Autofac 管理

    public void ConfigureServices(IServiceCollection services)    {      #region IServiceCollection 注册的服务,将来也会交给 Autofac 处理      services.AddTransient<ITestServiceA, TestServiceA>();      services.AddTransient<ITestServiceB, TestServiceB>();      services.AddTransient<ITestServiceC, TestServiceC>();      #endregion    }    public void ConfigureContainer(ContainerBuilder builder)    {        // builder.RegisterType<TestServiceA>().As<ITestServiceA>();        // builder.RegisterType<TestServiceB>().As<ITestServiceB>();        // builder.RegisterType<TestServiceC>().As<ITestServiceC>();        builder.RegisterType<TestServiceD>().As<ITestServiceD>();    }

Autofac 支持控制器属性注入

控制器本身是一个类,它的实例其实是有 IControllerActivator 来创建的。

  • 指定控制器的实例由容器来创建

    public void ConfigureServices(IServiceCollection services)    {        // ...              #region 指定控制器的实例由容器来创建      services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());      #endregion    }
  • 注册控制器的抽象和具体的关系

 public void ConfigureContainer(ContainerBuilder builder)    {        builder.RegisterType<TestServiceA>().As<ITestServiceA>().PropertiesAutowired();        builder.RegisterType<TestServiceB>().As<ITestServiceB>();        #region 注册所有控制器的关系及控制器实例化所需要的组件        var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()            .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();        builder.RegisterTypes(controllersTypesInAssembly)            .PropertiesAutowired();        #endregion    }
  • 在控制器内定义属性

    [Route("api/[controller]")]    [ApiController]    public class ValuesController : ControllerBase    {        public ITestServiceA TestServiceA { get; set; }        public ITestServiceB TestServiceB { get; set; }                [HttpGet]        public IActionResult Get()        {            TestServiceA.Show();            TestServiceB.Show();            return Ok();        }    }
  • 扩展:自己控制哪些属性需要做依赖注入(默认是让控制器中的属性都依赖注入)

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]    public class AutowaredAttribute : Attribute { }    public class PropertySelector : IPropertySelector    {        public bool InjectProperty(PropertyInfo propertyInfo, object instance)        {            return propertyInfo.CustomAttributes.Any(ca => ca.AttributeType == typeof(AutowaredAttribute));        }    }
    public void ConfigureContainer(ContainerBuilder builder)    {        builder.RegisterType<TestServiceA>().As<ITestServiceA>();        builder.RegisterType<TestServiceB>().As<ITestServiceB>();        #region 注册所有控制器的关系及控制器实例化所需要的组件        var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()            .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();        builder.RegisterTypes(controllersTypesInAssembly)            .PropertiesAutowired(new PropertySelector());        #endregion    }
[Route("api/[controller]")]    [ApiController]    public class ValuesController : ControllerBase    {        [Autowared]        public ITestServiceA TestServiceA { get; set; }                public ITestServiceB TestServiceB { get; set; }                [HttpGet]        public IActionResult Get()        {            TestServiceA.Show();            TestServiceB.Show();            return Ok();        }    }

Autofac 单实例多实现

 public void ConfigureContainer(ContainerBuilder builder)    {        builder.RegisterType<TestServiceA>().As<ITestServiceA>();        builder.RegisterType<TestServiceUpdate>().As<ITestServiceA>();    }
  • 如果多个实现同时注册,则后注册的实现就会覆盖先注册的实现,最后将返回最后一个注册的实现。

  • 如果多个实现同时注册,可以通过一个 IEnumerable<实例> 来获取到所有的实现。

        private readonly IEnumerable<ITestServiceA> _testServiceAs;        public ValuesController(IEnumerable<ITestServiceA> testServiceAs)        {            _testServiceAs = testServiceAs;        }
  • 当多个实现同时注册后,可以通过以下方式继续注册 实例 的所有实现。从而可以在控制器中直接使用具体实现类作为实现。

 public void ConfigureContainer(ContainerBuilder builder)    {        builder.RegisterType<TestServiceA>().As<ITestServiceA>();        builder.RegisterType<TestServiceUpdate>().As<ITestServiceA>();        builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(type => type.IsAssignableTo<ITestServiceA>()));    }
        private readonly TestServiceA _testServiceA;        private readonly TestServiceUpdate _testServiceUpdate;        public ValuesController(TestServiceA testServiceA,TestServiceUpdate testServiceUpdate)        {            _testServiceA = testServiceA;            _testServiceUpdate = testServiceUpdate;        }
  • 扩展:Autofac 的注册逻辑可以通过 Module 来拆分管理。

    public class AutofacModule : Autofac.Module    {        protected override void Load(ContainerBuilder builder)        {            // base.Load(builder);            builder.RegisterType<TestServiceA>().As<ITestServiceA>();            builder.RegisterType<TestServiceUpdate>().As<ITestServiceA>();            builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(type => type.IsAssignableTo<ITestServiceA>()));        }    }
 public void ConfigureContainer(ContainerBuilder builder)    { // builder.RegisterModule(new AutofacModule());        builder.RegisterModule<AutofacModule>();    }

Autofac 支持 aop

AOP 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。Autofac 的AOP是通过 Castle(也是一个容器)项目的名为 Autofac.Extras.DynamicProxy 核心部分实现的,顾名思义其实现方式为动态代理。

  • 安装 NuGet 程序包: Castle.Core 4.4.1 、Autofac.Extras.DynamicProxy 6.0.0

  • 新建自定义 AOP 拦截器

 public class CustomAutofacAop : IInterceptor    {        public void Intercept(IInvocation invocation)        {            {                Console.WriteLine("方法执行前...");            }            invocation.Proceed();            {                Console.WriteLine("方法执行后...");            }        }    }
  • 在接口上标记需要使用的拦截器

[Intercept(typeof(CustomAutofacAop))]public interface ITestServiceA{    void Show();}
  • 注册自定义拦截器,并允许实例接口使用拦截器

    public void ConfigureContainer(ContainerBuilder builder)    {//builder.RegisterType<CustomAutofacAop>();        builder.RegisterType(typeof(CustomAutofacAop));        builder.RegisterType<TestServiceA>().As<ITestServiceA>();        builder.RegisterType<TestServiceUpdate>().As<ITestServiceA>().EnableInterfaceInterceptors();    }
  • 在控制器中调用实例,即可成功执行 AOP 拦截器

[Route("api/[controller]")]    [ApiController]    public class ValuesController : ControllerBase    {private readonly TestServiceA _testServiceA;        private readonly TestServiceUpdate _testServiceUpdate;        public ValuesController(TestServiceA testServiceA,TestServiceUpdate testServiceUpdate)        {            _testServiceA = testServiceA;            _testServiceUpdate = testServiceUpdate;        }        public IActionResult Get()        {            _testServiceA.Show();            _testServiceUpdate.Show();            return Ok();        }    }

以上就是“.NET Core中怎么使用Autofac”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: .NET Core中怎么使用Autofac

本文链接: https://www.lsjlt.com/news/322772.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .NET Core中怎么使用Autofac
    今天小编给大家分享一下.NET Core中怎么使用Autofac的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Au...
    99+
    2023-06-29
  • .Net Core 之AutoFac的使用
    目录Autofac介绍组件的三种注册方式生命周期AutoFac 在asp .net core中的使用本文不介绍IoC和DI的概念,如果你对Ioc之前没有了解的话,建议先去搜索一下相关...
    99+
    2024-04-02
  • .Net Core中使用Autofac替换自带的DI容器的示例
    目录项目创建方案演示.Net Core自带DI不同的特性批量注入属性注入存储并提取容器实例为什么叫浅谈呢?就是字面上的意思,讲得比较浅,又不是不能用(这样是不对的)!!! Aufof...
    99+
    2024-04-02
  • Linux中怎么使用Docker托管.NET Core
    这篇文章主要介绍“Linux中怎么使用Docker托管.NET Core”,在日常操作中,相信很多人在Linux中怎么使用Docker托管.NET Core问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Lin...
    99+
    2023-06-27
  • .NET中IoC框架Autofac用法讲解
    1 前置阅读 在阅读本文章之前,你可以先阅读: 什么是依赖注入 2 简介 Autofac与C#语言的结合非常紧密,并学习它非常的简单,也是.NET领域最为流行的IoC框架...
    99+
    2024-04-02
  • ASP.net core怎么使用Autofac实现泛型依赖注入
    本文小编为大家详细介绍“ASP.net core怎么使用Autofac实现泛型依赖注入”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.net core怎么使用Autofac实现泛型依赖注入”文章能帮助大家解决疑惑...
    99+
    2023-06-30
  • .NET Core中的HttpClientFactory类怎么用
    小编给大家分享一下.NET Core中的HttpClientFactory类怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、HttpClient...
    99+
    2023-06-29
  • .Net Core的CustomSerialPort()怎么用
    这篇文章主要介绍“.Net Core的CustomSerialPort()怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.Net Core的CustomSerialPort...
    99+
    2023-06-26
  • .NET Core(.NET6)中gRPC使用实践
    目录一、简介二、创建gRPC服务端1.创建gRPC项目2.编写自己的服务三、创建gRPC客户端1.创建客户端项目2.grPC服务https的调用3.gRPC内网http调用4.IOC...
    99+
    2024-04-02
  • .NET Core中使用gRPC的方法
    目录1.什么是gRPC1.基本介绍2.proto文件3.上手实践2.gRPC流1.服务端流、客户端流、双向流2.NetCore Web项目作为客户端3.gRPC AOP拦截1.什么是...
    99+
    2024-04-02
  • .NET Core使用Autofac容器的DI依赖注入,IOC控制反转及AOP切面编程
    目录Autofac 容器Autofac 多种注入方式Autofac 生命周期Autofac 支持配置文件Autofac 整合 .NET 5 MVCAutofac 支持控制器属性注入A...
    99+
    2024-04-02
  • .net core异常中间件的使用
    目录正文结正文 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这样写入中间件哈,那么在env环境...
    99+
    2024-04-02
  • .net core静态中间件的使用
    目录正文结正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录。 这个就比较值得注意的,可能刚开...
    99+
    2024-04-02
  • 在NET Core 中获取 CPU 使用率
    以下文章来源于微信公众号DotNetCore实战  在 .NET Framework 中,很多人会用 PerformanceCounter 类做这件事情, 如下代码:   ...
    99+
    2024-04-02
  • ASP.net core使用Autofac实现泛型依赖注入
    目录什么是泛型依赖注入.net core里实现泛型依赖注入安装AutofacIMyRepository定义仓储接口MyRepositoryBase仓储实现在Program声明实现依赖...
    99+
    2024-04-02
  • 怎么使用Shell脚本执行.NET Core应用
    小编给大家分享一下怎么使用Shell脚本执行.NET Core应用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在本文中,我将研究如何创建 shell 脚本来运行...
    99+
    2023-06-09
  • NET Core中的Worker Service是什么/怎么用
    本篇内容主要讲解“NET Core中的Worker Service是什么/怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“NET Core中的Worker Service是什么/怎么用”吧!...
    99+
    2023-06-09
  • .NET Core 中对象池 Object Pool的使用
    目录一、什么是对象池二、.NET Core 中的对象池三、本文小结一、什么是对象池 对象池简单来说就是一种为对象提供可复用能力的软件设计思路。我们常说有借有还,再借不难,而对象池就...
    99+
    2024-04-02
  • .net core 中 WebApiClientCore的使用示例代码
    WebApiClient 接口注册与选项 1 配置文件中配置HttpApiOptions选项 配置示例 "IUserApi": { "HttpHost": "http://...
    99+
    2022-12-14
    .net core 中 WebApiClientCore使用 .net core  WebApiClientCore
  • .Net Core下使用Dapper的方法
    目录一、前言二、Dapper环境搭建三、Dapper封装定义DapperDBContext类异步分页构建(PageAsync)定义工作单元与事务定义数据仓储数据库连接四、Dapper...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作