Net Core依赖注入

Net Core依赖注入,第1张

利用Startup类中的configuration读取appsettings.json中的配置

1.container.AddTransient为瞬时生命周期,每次创建都是一个全新的实例

2.container.AddSingleton单例:全容器都是一个

3.container.AddScoped请求单例,一个请求代表一个作用域

1.瞬时,即时构造,即时销毁

2.单例,永远只构造一次

3.作用域单例,一次请求只构造一个

第一次请求解析

1.开始构造A类,因为是瞬时生命周期那么第一次请求就会被构造,然后销毁

2.在构造B类时需要A类,那么会首先构造A类(因为A类瞬时上一次已经被销毁),然后构造B类为单例

3.开始构造C,在构造时需要B类,因为B类全局单例,那就会直接构造C为作用域单例

4.直接构造瞬时D类

5.开始构造E类,构造式需要C类,因为C类为作用域单例,那么就会直接构造E类为瞬时

第一次请求结论

第二次请求解析

1.开始构造A类,因为是瞬时生命周期那么第二次请求就会重新被构造,然后销毁

2.在构造B类时因为在第一次请求时已经构造为单例,所以不再被构造

3.开始重新构造C,因为C在第二次请求为新的作用域,在构造时需要B类,因为B类全局单例,那就会直接构造C为作用域单例

4.直接构造瞬时D类

5.开始构造E类,构造式需要C类,因为C类为作用域单例,那么就会直接构造E类为瞬时

第二次请求结论

1.输出A

2.输出C

3.输出D

4.输出E

如果不想通过构造全部自动注入,能自定义注入

1.using Microsoft.Extensions.DependencyInjection

2.首先注入 IServiceProvider serviceProvider,利用serviceProcider.GetService()生成需要的实例

1.下载Autofac.Extensions.DependencyInjection和Autofac包

2.在Program网站启动时替换默认IOC工厂实例为Autofac,UseServiceProviderFactory(new AutofacServiceProviderFactory())

3.在Startup类中添加方法public void ConfigureContainer(ContainerBuilder services){services.RegisterType().As().SingleInstance()}

1.NuGet安装引用Autofac.Extras.DynamicProxy

2.引用using Autofac.Extras.DynamicProxy

3.创建类库继承自IInterceptor实现接口

4.自定义的Autofac的AOP扩展

前言

.NET Core 自带依赖注入框架,支持三种不同生命周期的注入模式:

Singleton 单例模式

Scoped 区域模式

Transient 瞬时模式

但是也不知道什么时候使用哪种模式才最合适,接下来我就用代码详细解读一下三种模式

代码示例

首先新建.NET Core API项目来进行代码测试

分别新建 Scoped、Singleton、Transient 三种模式的服务与接口,里面写一个GetIndex() 方法获取index ,用来区别服务的生命周期。

三个服务代码都是如此,然后添加依赖注入

最后在控制器中添加测试方法

使用 [FromService] 特性注入服务,每次服务注入两次,用来区别服务的变化,输出服务的index,启动项目查看结果

上图可以看到单例和区域模式下,两次注入的服务index是叠加的,可以说明两次服务注入的都是同一个。而瞬时模式两次注入的服务index都是初始值,也就说明两次服务都是新的。然后我们不停止项目在执行一次方法

可以看到单列模式和区域模式有了不同,单例模式注入的服务,index值一直在叠加,而区域模式有重新从0开始叠加。

总结

结合以上示例可以清楚地分别三种模式的差别

Singleton

单例模式,服务在第一次请求时被创建,其后的每次请求都沿用这个已创建的服务。

Scoped

作用域模式,服务在每次请求时被创建,整个请求过程中都贯穿使用这个创建的服务。

Transient  

瞬态模式,服务器在每次请求时被创建

如何在Linux服务器上部署.Net Core?.Net Core是.Net Framework的新一代版本,对于新手来说,将.Net Core部署在Linux服务器上是一件相当困难的事,为了帮助大家解决困难,今天小编要给大家分享如何在Linux服务器上部署.Net Core?

1、简介

一直以来,微软只对自家平台提供.NET支持,这样等于让这个“理论上”可以跨平台的框架在Linux和macOS上的支持只能由第三方项目提供(比如Mono .NET)。直到微软推出完全开源的.NET Core。这个开源的平台兼容.NET Standard,并且能在Windows、Linux和MacOS上提供完全一致的API。虽然这个小巧的.NET框架只是标准.NET的一个子集,但是已经相当强大了。

一方面,这个小巧的框架可以让某些功能性应用同时运行在三个平台上(就像某些功能性的Python脚本一样),另一方面,这也可以让服务器运维人员将ASP .NET服务程序部署在Linux服务器上(特别是对于运行Windows Server较为吃力的服务器)。

2、部署.NET Core

由于我没有可用的macOS设备,我将仅用Linux(服务器)作示范。我作示范的服务器是CentOS7 *** 作系统。

SSH连接至服务器,安装.NET Core的依赖项:

然后从微软官方获取.NET Core的主程序:

如果你的服务器不能正确访问这个地址,你可能需要手动访问后面的地址,下载完毕之后,用任意一种方法传递进服务器,并命名为dotnet.tar.gz。

执行指令将组件解压至指定的位置:

创建链接以在任何路径下直接引用dotnet指令:

至此,.NET Core框架应该就在你的服务器上搭建好了。

3、尝试部署一个ASP .NET服务程序

在本地计算机上,修改Visual Studio功能,确保这一项是被安装的:

启动Visual Studio,新建一个ASP .NET Core项目:

类型选择Web应用程序。我们不对示例作太大的修改,仅仅是为了演示ASP .NET运行于.NET Core的状况。在项目资源管理器内打开Program.cs,依然是熟悉的C#代码:

为了能正常运行,我们稍稍修改代码,让host的对象初始化器看起来是这个样子:

保存工程,将整个解决方案上传至服务器。再次连接服务器,导航到你存放工程文件的目录下,执行指令:

该指令指挥.NET Core恢复这个工程引用的包,耐心等待指令执行完毕。

接着,执行指令:

这条指令将使.NET Core编译并运行这个工程。控制台没有错误信息并产生类似输出,你的ASP .NET Core应用程序就应该在正确运行了:

试着在任意设备上访问你服务器的IP地址(或者域名),如果能正确加载默认页面,你的.NET Core环境就算部署完毕了:

这个.NET框架只是.NET标准的一个子集,不一定能100%兼容一个复杂的ASP .NET服务程序。但是利用这个框架,你可以把服务器切换至Linux系统,却仍然采用ASP .NET作为服务程序的具体实现方法。你也不必为了调试运行于Linux的服务程序而专门去配置一个Linux工作环境——因为.NET Core也可以运行在Windows上,Visual Studio本身就支持使用IIS Express来本地调试一个ASP .NET Core应用程序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11538419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存