首页 > 其他分享 >.NetCore【工作应用】Unity

.NetCore【工作应用】Unity

时间:2022-12-13 18:22:16浏览次数:77  
标签:生命周期 container 单例 NetCore Unity 应用 构造函数 注入

Unity

Unity是一个IoC容器,用来实现依赖注入(Dependency Injection,DI),减少耦合

Unity安装

install-package Unity

使用

            IUnityContainer container = new UnityContainer();//1、定义一个空容器
            container.RegisterType<IDbInterface, DbMSSQL>();//2、注册类型,表示遇到IDbInterface的类型,创建DbMSSQL的实例
            var db = container.Resolve<IDbInterface>();

注入方式

  • 构造函数注入

  • 属性注入

  • 方法注入

三种注入方式的执行顺序:构造函数注入->属性注入->方法注入

默认情况下如果构造函数上面没有使用特性,那么默认找参数最多的构造函数执行注入

生命周期

  • 瞬时生命周期

    无状态或者轻量的,使用不太频繁的临时对象

  • 单例

    整个应用,计数器,单例的服务

  • 线程单例

    一个请求

  • 其他生命周期

    • 解析生命周期

    • 分层生命周期

配置文件

  1. 安装包
install-package Unity.Interception.Configuration
  1. 配置文件

如果是单独文件的话需要设置为始终复制

<configuration>
	<configSections>
		<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
	</configSections>
	<unity>
		<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/>
		<containers>
			<container name="testContainer">
				<!--逗号前面是接口类型的完全限定名:命名空间+接口名称,逗号后面是DLL文件的名称 name解决同一个接口不同实例问题-->
				<register type="Demo.IocUnity.IDbInterface,Demo.IocUnity" mapTo="Demo.IocUnity.DbMSSQL, Demo.IocUnity" name="sql"/>
				<register type="Demo.IocUnity.IDbInterface,Demo.IocUnity" mapTo="Demo.IocUnity.DbOracle, Demo.IocUnity" name="oracle"/>
			</container>
		</containers>
	</unity>
</configuration>

  1. 读取配置实现
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Unity.config");//找配置文件的路径
            Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
            IUnityContainer container = new UnityContainer();

            section.Configure(container, "testContainer");
            IDbInterface db = container.Resolve<IDbInterface>("sql");

实现原理

  • 反射

    如何找构造函数

    1. 根据特性来找[InjectionConstructor]

    2. 参数最多

  • dictionary映射

    单例和线程单例实现的区别:ThreadLocal

    ThreadLocal的主要作用是让各个线程维持自己的变量

源码

标签:生命周期,container,单例,NetCore,Unity,应用,构造函数,注入
From: https://www.cnblogs.com/thomerson/p/16979568.html

相关文章

  • 用户看不到模型驱动应用?先检查这2项
    创建模型驱动应用并将其部署到另一个环境时,用户可能看不到该应用。我们的销售人员。没有看到该“销售中心”应用程序,系统提示:我们找不到适合您角色的任何应用程序。若要检......
  • 栈的应用之迷宫问题
    /************************************************************************//*自定义栈*/......
  • 如何通过Java应用程序压缩PDF文档
     PDF文档是我们日常办公中使用最频繁的文档格式。但因为大多数PDF文档都包含很多页面图像或大量图片,这就导致PDF文档过大,处理起来较为麻烦。PDF文件过大,就会导致传输或者......
  • 公有云-实验一 实践腾讯云部署Web应用
    实验一实践腾讯云部署Web应用概述企业A需要搭建一套在互联网上发布的论坛平台,但是企业内部并没有完善的基础架构设施,难以保证论坛平台的高可用性和高安全性。经过IT部门......
  • 应用服务器小笔记
    转自:https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/4971773 一、应用服务器:通过各种协议把商业逻辑曝露给客户端的程序应用服务器......
  • #盲盒+码# #跟着小白一起学鸿蒙#HAP应用调用so库方法
    作者:王石概述在《[#跟着小白一起学鸿蒙#七]写个NAPI子系统》的文章里我们熟悉了如何用NAPI框架实现一个HAP应用的业务接口,但是这只是OpenHarmony提供的一种实现方式。在......
  • Winforms Cefsharp应用通过Vs Installer安装,应用崩溃,缺少文件错误
         本文主要分析winformscefsharp应用通过VsInstaller做成安装包后,安装程序后,启动程序导致应用崩溃,提示System.IO.FileNotFoundException应用程序:Win......
  • 【Unity Shader】Special Effects(二)BorderFlow 边框流动(UI)
    更新日期:2021年8月23日。Github源码:​​​[点我获取源码]​​索引​​BorderFlow边框流动​​​​思路分析​​​​流光区域​​​​流光区域的中心点​​​​流光区域的......
  • Unity插件 - MeshEditor(五) 网格顶点动画(变形动画)
        网格顶点动画(变形动画)是针对于物体的形状可以随意变换并记录为关键帧的动画,虽然模型的顶点数据还是应该交给GPU绘制才是正道,CPU刷新模型顶点始终是个吃力不讨好的事......
  • 【Unity】 HTFramework框架(四十)Debug的性能监控
    更新日期:2021年4月22日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​C#代码性能监控​​​​使用​​​​Debug的性能监控模式​​​......