原文地址: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. 配置Jsp错误页面

    配置Jsp错误页面一般我们有2种做法: (1)在页面中用指令进行配置,即page指令的errorPage和isErrorPage:可以使用page指令的errorPage来指定错误页!在当前JSP页面 ...

  2. Structrued Streaming业务数据实时分析

    先启动spark-shell,记得启动nc服务 输入以下代码 scala> import org.apache.spark.sql.functions._ import org.apache.s ...

  3. SQL Server 2016:内存列存储索引

    作者 Jonathan Allen,译者 谢丽 SQL Server 2016的一项新特性是可以在“内存优化表(Memory Optimized Table)”上添加“列存储索引(Columnstor ...

  4. MySQL字符集及校对规则的理解

      阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常见处理操作 字符集的正确实践 MySQL的校对 ...

  5. asp.net 基础内容

    1. ViewData ViewBag  TempData 区别? 1.ViewData和TempData是字典类型,赋值方式用字典方式,ViewData["myName"] 2. ...

  6. JQ获取地址栏参数

    //获取地址栏参数 function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...

  7. HBase中无法使用backspace删除

    转载自:Hbase命令行无法删除的问题 在HBase的shell命令行界面输入错误项按"退格键"删除,却怎么也删除不了: 解决办法: 第一步,修改SecureCRT的设置参数: 第 ...

  8. http 文件传输

    http 文件传输 https://www.zhihu.com/question/58118565 转载自:http://www.voidcn.com/article/p-rpdhbjib-m.htm ...

  9. torando-ioloop生命周期

    https://stackoverflow.com/questions/5375220/how-do-i-stop-tornado-web-server?answertab=votes#tab-top ...

  10. error C2011: “timespec”:“struct”类型重定义

    error C2011: “timespec”:“struct”类型重定义 C++ pthread pthread.h 中的 timespec 和time.h 中的 结构定义重复了 ,同时两个头文件中 ...