晋商大会,ina轴承,沉鱼落叶闭月羞花
.net unity ioc框架的使用实例,具体内容如下
1.ioc简介
ioc(inversion of control), 控制反转
di (dependency injection),依赖注入
ioc的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。
2.unity引入
3.创建单例模式容器类
using microsoft.practices.unity; using microsoft.practices.unity.configuration; using system; using system.collections.generic; using system.configuration; using system.linq; using system.text; using system.threading.tasks; namespace unityioctest { /// <summary> /// unity ioc单例模式 /// </summary> public class unitysingleton { //单例 private static unitysingleton instance; //ioc容器 public iunitycontainer container; //获取单例 public static unitysingleton getinstance() { if (instance == null || instance.container == null) { string configfile = "unity.config"; var filemap = new execonfigurationfilemap { execonfigfilename = configfile }; //从config文件中读取配置信息 configuration configuration = configurationmanager.openmappedexeconfiguration(filemap, configurationuserlevel.none); //获取指定名称的配置节 unityconfigurationsection section = (unityconfigurationsection)configuration.getsection("unity"); instance = new unitysingleton() { //container = new unitycontainer().loadconfiguration((unityconfigurationsection)configurationmanager.getsection("unity"), "mycontainer") container = new unitycontainer().loadconfiguration(section, "mycontainer") //container = new unitycontainer() }; //instance.container.registertype<iexampleclass, exampleclass>(); } return instance; } //ioc注入实体 public static t getinstancedal<t>() { return getinstance().container.resolve<t>(); } } }
此处是将unity config配置单独成一个文件,方便管理。
4.添加ioc相关类
接口类
public interface iexampleclass { void dohelloword(); }
具体实现类
public class exampleclass : iexampleclass { public void dohelloword() { console.writeline("hello word!"); } }
实现类扩展
public class diexampleclass { //属性注入 [dependency] public iexampleclass example { get; set; } private iexampleclass testinject; public void dowork() { example.dohelloword(); testinject.dohelloword(); } //方法注入 [injectionmethod] public void initialize(iexampleclass instance) { testinject = instance; } }
5.添加配置文件unity.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="unity" type="microsoft.practices.unity.configuration.unityconfigurationsection,microsoft.practices.unity.configuration" /> </configsections> <unity> <!--定义类型别名--> <aliases> <add alias="iexampleclass" type="unityioctest.iexampleclass,unityioctest" /> <add alias="exampleclass" type="unityioctest.exampleclass,unityioctest" /> </aliases> <!--容器--> <container name="mycontainer"> <!--映射关系--> <!--<register type="iexampleclass" mapto="exampleclass"></register>--> <register type="unityioctest.iexampleclass,unityioctest" mapto="unityioctest.exampleclass,unityioctest"></register> </container> </unity> </configuration>
6.函数调用
class program { static void main(string[] args) { //var dao = unitysingleton.getinstancedal<iexampleclass>(); var dao = unitysingleton.getinstancedal<diexampleclass>(); dao.dowork(); console.readline(); } }
7.结果显示
hello word!
hello word!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论