Unity框架学习记录(一)

近来在面试中被问到了IOC的设计模式,以前在帮忙做java项目时接触过spring,但在.NET的项目中几乎没有用过ioc框架。所以趁着周末学习一下微软的ioc框架Unity。

先从最简单的用法开始吧。

先建一个控制台工程,实用NuGet添加Unity组件。我这里选择的版本是Unity v4.0.1,高版本的Unity我试过在使用是会出些异常,比如Microsoft.Practices.Unity.Configuration程序集无法加载,也不知道原因是什么。

然后在新建一个类库项目,编写接口和类。

接口在ioc的设计模式中经常被用到,用接口引用类对象能更好实现松耦合,发挥ioc设计模式的优势。

接口和类:

    public interface IProgrammer
    {
        void Introduce();
    }
    public class CSharpProgrammer : IProgrammer
    {
        public void Introduce()
        {
            Console.WriteLine("我是一个C#程序员");
        }
    }
    public class JavaProgrammer : IProgrammer
    {
        public void Introduce()
        {
            Console.WriteLine("我是一个Java程序员");
        }
    }

接下来就是创建ioc容器和注册组件了,Unity一般有两种方式。

一种是硬编码的方式写在程序里:

//创建容器
IUnityContainer container = new UnityContainer();
//将CSharpProgrammer类注册到IProgrammer上,并将类对象命名为DoNet
container.RegisterType<IProgrammer, CSharpProgrammer>("DoNet");
container.RegisterType<IProgrammer, JavaProgrammer>("java");

//获取DoNet对象
IProgrammer programmer = container.Resolve<IProgrammer>("DoNet");
programmer.Introduce();

 还有一种是使用配置文件:

在控制台下新建一个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="CSharpProgrammer" type="Model.CSharpProgrammer,Model"/>
      <add alias="JavaProgrammer" type="Model.JavaProgrammer,Model"/>
      <add alias="IProgrammer" type="Model.IProgrammer,Model"/>
    </aliases>
    <container name="MyContainer">
      <register type="IProgrammer" mapTo="CSharpProgrammer" name="net"></register>
      <register type="IProgrammer" mapTo="JavaProgrammer" name="java"></register>
    </container>
  </unity>
</configuration>

configSection用于新建一个自定义的节点unity,在unity节点中完成注册,

然后在程序中读取配置文件:

            IUnityContainer container = new UnityContainer();
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = "Unity.config";

            Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection("unity");

            container.LoadConfiguration(section, "MyContainer");

            IProgrammer programmer = container.Resolve<IProgrammer>("java");
            programmer.Introduce();
            Console.ReadKey();

 

转载于:https://www.cnblogs.com/yq-blog/p/8845885.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值