.net Ico 之 Unity 适合刚开始使用

介绍:

首先稍微介绍一下,Unity是微软patterns& practices组用C#实现的轻量级、可扩展的依赖注入容器,可通过代码或xml配置文件来配置对象之间的关系。那么通过一个简单的代码来实现。

测试项目详细

1、新建一个控制台项目叫UnityDemo

2、建立一个接口IProduct,包括一个属性(string ClassName{get;set;}),一个方法(void ShowInfo())

3、建立两个类Milk,Sugar,并且继承IProduct,两个类实现代码如下:

public class Milk : IProduct
    {
        public string ClassName { get; set; }

        public void ShowInfo()
        {
            Console.WriteLine("milk:{0}",ClassName);
        }
    }

  

public class Sugar : IProduct
    {
        public string ClassName { get; set; }
        public void ShowInfo()
        {
            Console.WriteLine("sugar:{0}", ClassName);
        }
    }

  

开始测试

1、使用Unity需要引用三个dll,也可以使用Nuget获取

2、前面有提到,使用Unity有两种方式,我们先使用代码来控制

a、新建一个静态方法ContaninerCode,需要引用Microsoft.Practices.Unity代码如下:

static void ContainerCode()
        {
            //创建Unity实例
            IUnityContainer container = new UnityContainer();

            //默认注册(无命名)
            container.RegisterType<IProduct, Milk>();
            //命名注册
            container.RegisterType<IProduct, Sugar>("Sugar");

            //解析默认对象
            IProduct _product = container.Resolve<IProduct>();
            _product.ClassName = _product.GetType().ToString();
            _product.ShowInfo();

            //指定命名解析对象
            IProduct _Sugar = container.Resolve<IProduct>("Sugar");
            _Sugar.ClassName = _Sugar.GetType().ToString();
            _Sugar.ShowInfo();

            //获取容器中所有的IProduct注册的已命名对象(不包含默认注册)
            IEnumerable<IProduct> classList = container.ResolveAll<IProduct>();

            foreach (var item in classList)
            {
                item.ClassName = item.GetType().ToString();
                item.ShowInfo();
            }
        }

  运行结果如下:

3、使用配置文件实现

a、根目录新建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="Iproduct" type="UnityDemo.IProduct,UnityDemo"/>
      <add alias="Milk" type="UnityDemo.Milk,UnityDemo"/>
      <add alias="Sugar" type="UnityDemo.Sugar,UnityDemo"/>
    </aliases>

    <!--容器-->
      <container name="MyContainer">
        <!--开始映射关系-->
        <register type="Iproduct" mapTo="Milk"></register>
        <register type="Iproduct" mapTo="Sugar" name="Sugar"></register>

      </container>
  </unity>

</configuration>

  b、创建静态方法ContainerCodeForConfig()加载配置文件,需要引用dll,Practices.Unity.Configuration、System.Configuration代码如下:

static void ContainerCodeForConfig()
        {
            //创建Unity实例
            IUnityContainer container = new UnityContainer();

            string configFile = "Unity.config";
            var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };

            //读取指定config文件
            Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

            //获取指定名称的节点
            UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection("unity");
            //获取容器节点
            container.LoadConfiguration(section, "MyContainer");

            IProduct p = container.Resolve<IProduct>("Sugar");
            p.ClassName = p.GetType().ToString();
            p.ShowInfo();
        }

运行结果如下:

可以看到 我们并没有创建IProduct、Sugar类,但是能调用其方法,这是Ioc 帮我们做的

这是一个很简单的入门。

时间: 2024-11-02 16:20:29

.net Ico 之 Unity 适合刚开始使用的相关文章

vue2.0路由-适合刚接触新手简单理解

vue路由:vue-router vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用,是用一些超链接来实现页面切换和跳转的.在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换. 下载方式:npm install vue-router html: <!DOCTYPE html> <html lang="en&

Python-列表嵌套字典-名片管理系统(适合刚学习完字典和列表的同学练手)

why?我要写这个程序.这个程序是在复习字典的使用并且配合前面复习过的列表来写的一个程序.实现一个名片的管理! 什么时候用列表什么时候用字典呢?面对这个问题我的想法是,当你存取的数据类型都是一样的时候,使用列表,当你存取的数据类型不一样时就用字典.这里说明一下数据类型不一样不是指整形或者字符型 举个例子:如果你需要存很多人的姓名,仅仅这一个属性,就用列表来进行处理,当你要存取不仅仅是人名,包括年龄,性别,国籍等等这些信息时,这时候用字典是最合适的. 在编写这个程序时,首先考虑2个问题: 1.列表

centos6.5下yum安装lnmp(适合刚入职的新手的方法)

新入职的员工,开始的时候都是让配环境,本地写代码用的wamp,在lnmp或lamp测试,除非有些土豪公司 用的是(果机). 另外安装时,把整个流程在脑子里先过一篇(记不全也没关系,一回生二回熟),重在实践,实践出真知! 一:首先要在自己电脑安装一个虚拟主机软件,我这有: vmware10 ---> 网盘地址:http://pan.baidu.com/s/1pJt5HVl centos6.5(32位):网盘地址:http://pan.baidu.com/s/1pJqNLxD xshell4:  网

【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)

写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shader的艰难,在群里也见了非常多人提出的问题. 我认为学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文...这对我有什么优点呢?强迫我对知识进行梳理,对细节问题把握更清楚. 第二个原因你懂的. 关于本书的定位问题: 面向Unity Shader刚開始学习的人,但要

陈松松:刚入门的视频营销新人,需要做哪些准备?

这是我写的第81篇原创视频营销文章 陈松松,6年视频营销实战经验 越来越多的人都看好视频营销, 但很多刚入门的朋友不清楚做视频营销需要做哪些准备? 今天就专门分享这个话题, 如果你是刚刚入门或者打算操作视频营销, 本文你一定要好好的学习和研究! 工欲善其事,必先利其器! 也就是说一个技艺高超的工匠,要想他的工作做好,一定先让他的工具锋利. 所以想要做好一件事情,准备工作非常重要! 01.准备一台电脑 我推荐台式电脑,工作效率高,处理视频速度快. 比如我们对录制完的视频进行编辑,有时候要借用电脑桌

【强烈推荐】可能是最适合你的 Java 学习路线和方法

如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path-and-methods.md 这个链接进行阅读. 到目前为止,我觉得不管是在公众号后台.知乎还是微信上面我被问的做多的就是:"大佬,有没有 Java 学习路线和方法"(大佬属现代流行的客气称呼,本人非大佬哈).所以,这部分单独就自己的学习经历来说点自己的看法. 前言 大一的时候,我仅仅接触

一些适合学习的网站分享

由于我作为一名即将毕业的学生,曾经也很苦恼自己会不知道如何学习,自己平时总结下来了相关的学习资源,大家平时也可以养成积累的好习惯,下面是一些简单的分享,适合刚入门和职场的大家. 1.菜鸟教程 https://www.runoob.com/ 里面有各种语言的案例和讲解,适合自己翻阅快速入门和对照着学习改错 2.博客园 https://www.cnblogs.com/ 和csdn网站差不多,但是里面的内容质量高,适合自己快速找到有效的视频 3.CSDN https://www.csdn.net/ C

谈谈程序员学习英文

今天把<Ogre 3D 1.7 Beginner's Guide>看完了,这也是我第一次完整的阅读完一本英文书籍,当然也是第一本英文技术书籍.来和大家分享一下我对程序员学习英文的一些看法. 学生时代到工作的个人英语学习经历  我自己的英文怎么说呢,不好不坏吧,小学是在小镇里上的,中学时候家搬到了市里我也就上了市里的初中,一开始我的英文绝对是最烂的.老师让读课文就把英文书上的句子下面标满了近似音的汉字.比如Good Bye就标成"骨头白".现在想想真是好笑死了.还记得一次上英

成为VR开发者的六个基本问题

2016-05-31 小小CTO 未来CTO 我常被问起能否提供更多的建议,帮助其他人进入这个行业,或是做VR开发人员该怎么赚钱.我很难具体回答,因为每个人的情况都很不一样.不过还是有一些建议适用于想要进入VR行业的人,如果你正在考虑要不要成为VR开发人员,或许可以往下看看.我能够使用到哪些硬件?不是每个VR开发人员都会具备所有VR设备的.有些开发工作室只和单一VR平台合作,而马上要推出优质内容的开发者常常会和大型硬件厂商联系并得到独家供应的设备.如果刚刚开始走上VR开发者的道路,你可能无法马上