原文地址:http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html

里面有一个例子差了些代码,补全后贴上。

3.1.3 依赖获取

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml; //定义了三个接口 IWindow IButton ITextBox
namespace DependencyLocate
{
internal interface IWindow
{
String ShowInfo();
}
internal interface IButton
{
String ShowInfo();
}
internal interface ITextBox
{
String ShowInfo();
}
} //实现接口 IWindow, 实现类 WindowsWindow、MacWindow
namespace DependencyLocate
{
internal sealed class WindowsWindow : IWindow
{
public String Description { get; private set; } public WindowsWindow()
{
this.Description = "Windows风格窗体";
} public String ShowInfo()
{
return this.Description;
}
} internal sealed class MacWindow : IWindow
{
public String Description { get; private set; } public MacWindow()
{
this.Description = " Mac风格窗体";
} public String ShowInfo()
{
return this.Description;
}
}
} //实现接口 IButton, 实现类 WindowsButton、MacButton
namespace DependencyLocate
{
internal sealed class WindowsButton : IButton
{
public String Description { get; private set; } public WindowsButton()
{
this.Description = "Windows风格按钮";
} public String ShowInfo()
{
return this.Description;
}
} internal sealed class MacButton : IButton
{
public String Description { get; private set; } public MacButton()
{
this.Description = " Mac风格按钮";
} public String ShowInfo()
{
return this.Description;
}
}
} //实现接口 ITextBox, 实现类 WindowsTextBox、MacTextBox
namespace DependencyLocate
{
internal sealed class WindowsTextBox : ITextBox
{
public String Description { get; private set; } public WindowsTextBox()
{
this.Description = "Windows风格文本框";
} public String ShowInfo()
{
return this.Description;
}
} internal sealed class MacTextBox : ITextBox
{
public String Description { get; private set; } public MacTextBox()
{
this.Description = " Mac风格文本框";
} public String ShowInfo()
{
return this.Description;
}
}
} namespace DependencyLocate
{
internal interface IFactory
{
IWindow MakeWindow(); IButton MakeButton(); ITextBox MakeTextBox();
}
} namespace DependencyLocate
{
internal sealed class WindowsFactory : IFactory
{
public IWindow MakeWindow()
{
return new WindowsWindow();
} public IButton MakeButton()
{
return new WindowsButton();
} public ITextBox MakeTextBox()
{
return new WindowsTextBox();
}
}
} namespace DependencyLocate
{
internal sealed class MacFactory : IFactory
{
public IWindow MakeWindow()
{
return new MacWindow();
} public IButton MakeButton()
{
return new MacButton();
} public ITextBox MakeTextBox()
{
return new MacTextBox();
}
}
} namespace DependencyLocate
{
internal static class FactoryContainer
{
public static IFactory factory { get; private set; } /// <summary>
/// 静态构造函数:
/// 是一个特殊的函数,将在其他所有方法执行之前以及变量或属性被第一次访问之前执行。
/// 这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。
/// 也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
/// 可以使用该函数来初始化静态变量,不应该使用实例构造函数初始化静态变量。
/// 地址:https://www.cnblogs.com/aimi/p/5499711.html
/// </summary>
static FactoryContainer()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("Config.xml");
XmlNode xmlNode = xmlDoc.ChildNodes[].ChildNodes[].ChildNodes[]; if ("Windows" == xmlNode.Value)
{
factory = new WindowsFactory();
}
else if ("Mac" == xmlNode.Value)
{
factory = new MacFactory();
}
else
{
throw new Exception("Factory Init Error");
}
}
}
} namespace DependencyLocate
{
class Program
{
static void Main(string[] args)
{
IFactory factory = FactoryContainer.factory;
IWindow window = factory.MakeWindow();
Console.WriteLine("创建 " + window.ShowInfo());
IButton button = factory.MakeButton();
Console.WriteLine("创建 " + button.ShowInfo());
ITextBox textBox = factory.MakeTextBox();
Console.WriteLine("创建 " + textBox.ShowInfo()); Console.ReadLine();
}
}
}

C# 依赖注入那些事儿的更多相关文章

  1. C#中的依赖注入那些事儿

    目录 目录 1 IGame游戏公司的故事 1.1 讨论会 1.2 实习生小李的实现方法 1.3 架构师的建议 1.4 小李的小结 2 探究依赖注入 2.1 故事的启迪 2.2 正式定义依赖注入 3 依 ...

  2. [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject

    本人博客已转移至:http://www.exblr.com/liam  为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...

  3. C# 依赖注入

      http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 这篇文章真的非常非常好···绝对值得收藏学习.     目录 目录 1 ...

  4. 依赖注入(DI)和Ninject

    [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject 本文目录: 1.为什么需要依赖注入 2.什么是依赖注入 3.使用NuGet安装库 4.使用Ninject的一般步骤 5. ...

  5. c#之依赖注入

    C# 依赖注入 http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 1 IGame游戏公司的故事 1.1 讨论会 话说有一个叫 ...

  6. 依赖注入框架Ninject

    为什么需要依赖注入 我们提到MVC的一个重要特征是关注点分离(separation of concerns).我们希望应用程序的各部分组件尽可能多的相互独立.尽可能少的相互依赖. 我们的理想情况是:一 ...

  7. C#基础知识之依赖注入

    目录 1 IGame游戏公司的故事 1.1 讨论会 1.2 实习生小李的实现方法 1.3 架构师的建议 1.4 小李的小结 2 探究依赖注入 2.1 故事的启迪 2.2 正式定义依赖注入 3 依赖注入 ...

  8. 通过中看不中用的代码分析Ioc容器,依赖注入....

    /** * 通过生产拥有超能力的超人实例 来理解IOC容器 */ //超能力模组接口 interface SuperModuleInterface{ public function activate( ...

  9. (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)

    Spring要把xml配置中bean的属性实例化为具体的bean,"依赖注入"是关卡.所谓的"依赖注入",就是把应用程序对bean的属性依赖都注入到spring ...

随机推荐

  1. Java并发编程中的相关注解

    引自:http://www.cnblogs.com/phoebus0501/archive/2011/02/21/1960077.html Java并发编程中,用到了一些专门为并发编程准备的 Anno ...

  2. 关于CSS3属性transition的触发

    关于怎么触发transition的效果,前面有篇文章说过一次,<关于transition和animation>,而且在实际的项目生产中,也是一直这么使用的,因为明明知道直接添加class是 ...

  3. spring揭密学习笔记(2)-spring ioc容器:IOC的基本概念

    1. IoC的理念就是,让别人为你服务!2. 其实IoC就这么简单!原来是需要什么东西自己去拿,现在是需要什么东西就让别人送过来.一个生动的示例 3.三种依赖注入的方式 IoC模式最权威的总结和解释, ...

  4. android 开发 碎片Fragment布局例子(用按键切换碎片布局)

    实现思路: 1.写一个父类布局,里面写一个按键和一个帧布局(用于给Fragment布局后续替代) 2.写3个子布局,并且在写3个class继承Fragment布局 3.在MainActivity的cl ...

  5. expdp impdp 参数

    With the Partitioning, OLAP, Data Mining and Real Application Testing options启动 "BEMIS".&q ...

  6. ROS学习手记 - 6 使用ROS中的工具:rqt_console & roslaunch & rosed

    http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch Using rqt_console and roslaunch This tuto ...

  7. 操作MySQL

    1修改MySQL表结构数据类型:ALTER TABLE 表名 MODIFY 字段名 VARCHAR(50); 2.删除表:DROP TABLE 表名: 3.now() 日期时间函数 4.sysdate ...

  8. 18.os模块获取url后缀

    针对文件下载文件重命名文件后缀的获取,此方式只适用url里有后缀的情况(其它的要根据情况去用类似方式获取字段后缀). import os A="http://www.铜陵市建筑工程信息网.c ...

  9. secureCRT 设置字体时,显示字体较少问题

    控制面板->字体->选择字体,右击"显示".就可以再crt中看到了.

  10. centos下查看python的安装目录

    直接用python命令,打印sys的path即可: >>> import sys >>> print(sys.path) ['', '/usr/local/lib/ ...