学习Unity

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。
作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。当系统重构的时候,代码的改写量将大大减少。
理解依赖注入:
    当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。

.net中微软有一个轻量级的IoC框架Unity,支持构造器注入,属性注入,方法注入

首先我们先下载安装unity

具体实现方法如下所示:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

namespace UnityDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建容器
            IUnityContainer container = new UnityContainer();
            //注册映射
            container.RegisterType<IA, A>();       //得到A的实例
            var a = container.Resolve<IA>();
            var b = new B(a);
            b.Method();
            Console.ReadKey();
        }
    }
    public interface IA
    {
        void Method();
    }
    public class A : IA
    {

        public void Method()
        {
            Console.WriteLine("A test ");
        }
    }
    public class B : IA
    {
        public IA a;
        public B(IA a)
        {
            this.a = a;
        }
        public void Method()
        {
           a.Method();
            Console.WriteLine("B test");
        }
    }
}

配置文件实现方式

配置文件配置

  

<?xml version="1.0" encoding="utf-8" ?>
<configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity>
    <containers>
      <container name="defaultContainer">
        <register type="UnityDemo.IA,UnityDemo" mapTo="UnityDemo.A,UnityDemo" />
      </container>
    </containers>
  </unity>
</configuration>
UnityConfigurationSection configuration = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)
            as UnityConfigurationSection;
configuration.Configure(container, "defaultContainer");

  container.RegisterType<IA, A>();
  var a = container.Resolve<IA>();
  var b = new B(a);
  b.Method();

和所有的 IOC 框架一样,我们可以使用 XML 文件来配置 Unity。建议使用一个单独的 XML 配置文件,因为 app.config/web.config 已经被塞入太多的东西。修改配置的时候既不清晰,也容易出错。

我们新建一个配置文件:Unity.config

配置文件所配置的内容都一样这里就不多说 了

我们来看一下加载配置文件后台代码:

var configMap = new ExeConfigurationFileMap { ExeConfigFilename = "Unity.config" };
            var configuration = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
            IUnityContainer container = new UnityContainer();
            var section = (UnityConfigurationSection)configuration.GetSection("unity");
            section.Configure(container, "defaultContainer");
            var a = container.Resolve<IA>();
            var b = new B(a);
            b.Method();

这里读取的配置文件默认是程序bin目录下, 所以还有个小小的设置需要注意一下

设置一下你自己定义的配置文件的属性->高级:复制输出到目录选择如果较新则复制

以上就是我初学unity的一些内容如有那些不对的地方还请指出来 大家一起学习!

时间: 2024-10-18 19:11:17

学习Unity的相关文章

Unity基础学习-Unity概述

Unity 概述 Unity是一个强大的引擎,里面包括大量的工具用来满足各种各样的需求.Unity的编辑器是直观的可定制的,让您在您的工作流中有较大的自由度. 本小节是开始学习Unity的关键部分.里面对在Unity中创建一个游戏的重要步骤进行跟踪讲述.首先是资源的工作流,然后是如何建立场景,最后把您构建的程序进行发布.

菜鸟学习 - Unity中的热更新 - LuaInterface用户指南

[由于学习,所以翻译!] 1.介绍 LuaInterface 是 Lua 语言和 Microsoft.NET 平台公共语言运行时 (CLR) 之间的集成库. 非常多语言已经有面向 CLR 编译器和 CLR 实现,已经存在为微软windows. BSD 操作系统和 Linux 操作系统. Lua是一个为扩展应用程序而设计的编程语言,解释运行,非常容易嵌入的库.具体的信息能够參考Lua'sreference manual. 以下的部分介绍如何编译和安装LuaInterface.第3部分包括了在CLR

小白学习Unity 3D做经典游戏坦克大战日常

老师 | Trigger 学习者 |小白 出品 | Siki 学院 Hello,小伙伴们.接下来小白跟Trigger老师做一款2D游戏坦克大战.从素材.代码到场景和UI的游戏开发.小白把日常遇到的问题做一个记录贴,让各位小伙伴充分了解Untiy 3D基本游戏开发和一些小白容易疏忽的问题.Unity 3D有着非常便利的管理和编码功能.现在非常热门的MOBA游戏王者荣耀,也是用Unity 3D 开发的呢!用其他编程语言例如: java / kotlin 和 Object-C / swift 原生游戏

菜鸟学习 - Unity中的热更新 - Lua和C#通信

孙广东 2015-4-6 热更新我是个菜鸟,感谢网上的各位的奉献,这次又当一回搬运工. 准备: 1.了解Lua的语法 推荐书籍<Lua程序设计 第二版> 2.使用ULua插件进行通信 尽量早上真机.因为Bug问题特别多. 大杂烩: 更新LUa其实也是更新资源. Lua被看作一个资源么.Lua代码都是运行时才编译的,不运行的时候就如同一张图片.一段音频一样,都是文件资源:所以更新逻辑只需要更新脚本,不需要再编译,因而Lua能轻松实现"热更新".运行效率由于使用反射,所以成为它

理解依赖注入(IOC)和学习Unity

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口.当系统重构的时候,代码的改写量将大大减少. 理解依赖注入: 当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例.然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器

【转】理解依赖注入(IOC)和学习Unity

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection).作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口.当系统重构的时候,代码的改写量将大大减少.理解依赖注入:    当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例.然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容

菜鸟学习 - Unity中的热更新 - 更新思路

我们游戏对资源的更新并没有使用AssetBundle. 而是采用了下面的解决方案(客户端C# 和服务器 Java的约定 ,传输协议都是json): 第一步:客户端与服务器约定一个版本号.第二步:客户端向服务器发送本地的一个版本号(不同的玩家,本地的版本号的信息肯定也不一样),服务器比对最新的版本号与客户端本地的版本号,过滤出需要更新的文件列表.把最新的版本号和需要更新的文件列表发送给客户端.第三步:客户端下载需要更新的文件列表,直到下载完毕,然后重写本地的版本号. 对脚本的更新也是采用成熟的Ul

unity学习笔记2

[转]自http://blog.csdn.net/tianyao9hen/article/details/53141141 对于新手学习unity碰撞讲的还是比较清楚的 OnTriggerEnter和OnCollisionEnter的触发条件是不同的,需要在设计的过程中加以关注. 触发的共同要求 碰撞的两个物体A,B,都要有碰撞体(collider),Box Collider,Sphere Collider,Capsule Collider等的任意一种 当A,B都添加刚体(Rigidbody)时

【Unity Shaders】学习笔记——SurfaceShader(十一)光照模型

[Unity Shaders]学习笔记——SurfaceShader(十一)光照模型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5664792.html 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以. 水平有限,难免有谬误之处,望指出. LitSphere(Matcap) 发光球体光照模型就是将发光球体的纹理映射在球体上,来实现光照效果.这可以创造一些效果细腻的发光球体效果,但是它不受