你的位置:首页 > ASP.net教程

[ASP.net教程]IoC组件Unity再续~根据类型字符串动态生产对象


回到目录

这个根据类型字符串动态去生产一个接口的对象,在实现项目中用途很广,这即省去了配置config文件的麻烦,又使用生产对象变更可配置,你完全可以把这种多态持久化到数据库里或者黑猫,白猫,抓住耗子就是好猫!

现在使用我来讲一个例子,也是编程里的一个Hello world的例子,传说有IHello接口,它有China和USA两种实现,什么时候用它们完成由配置决定,程序里不能写死

统一的人类

  public interface IHello  {    void HelloWorld();  }

中国人说HelloWorld

  public class China : IHello  {    public void HelloWorld()    {      Console.WriteLine("你好,世界!");    }  }

美国人说HelloWorld

 public class USA : IHello  {    public void HelloWorld()    {      Console.WriteLine("Hello World!");    }  }

我们要想动态生产对象,有很多方法,也有很多第三方的IOC组件,向autofac,castle,unity都可以实现,在大叔框架里,比较青睐于Unity,所以我们还是以Unity为例,来生产一个这个对象

      //IOC上下文,使用using自动进行Dispose      using (IUnityContainer container = new UnityContainer())      {        string helloType = "Lind.DDD.Test.China";//从配置文件或者数据库里读取信息        container.RegisterType(typeof(IHello), Type.GetType(helloType));//注意类型与实现的关系        var hello = container.Resolve<IHello>();//生产对象        hello.HelloWorld();//调用方法      }

结果当前是输出中国人的Hello world!

对于多语言的系统,也可以根据区域信息动态生产对象,当然IOC是我们使用这些功能的前提和基础!

回到目录