原文地址: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. gulp 编译es6 react 教程 案例 配置

    1.gulp基本配置: var gulp = require('gulp'), watch = require('gulp-watch'), babel = require('gulp-babel') ...

  2. javaweb项目中遇到的一些乱码问题

    在做javaweb项目时,我们经常会遇到一些乱码问题: 首先,确定一点思想:要想不乱码,你要保证编码一致就行了,即统一编码~ 其一,jsp等页面中的中文显示乱码(这里不只是说jsp文件,其它文件也有这 ...

  3. idea 和eclipse的debug调试快捷键对比

    IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...

  4. linux进程端口防火墙

    进程端口: 1.netstat –apn :查看所有的进程和端口使用情况 2.查看8080端口是否被占用 [root@localhost bin]# lsof -i:8080 3.查看防火墙开放的端口 ...

  5. Weblogic环境(JSP)文件下载问题(下载的文件与原文件大小不一致问题)

    最近发现一个问题有个download.jsp文件下载jsp在Tomcat下正常,在Weblogic下不太正常! Weblogic下载的文件比原文件大两个字节,查看文件像是文件内容最后多了空行 检查do ...

  6. GPUImage中曝光滤镜实现——GPUImageExposureFilter

    核心代码: varying highp vec2 textureCoordinate; uniform sampler2D inputImageTexture; uniform highp float ...

  7. Angular.js入门

    一.引入angular.js  <script type="text/javascript" src="../plugins/angularjs/angular.m ...

  8. java中 BeanUtils.copyProperties的用法

    BeanUtils提供了对java发射和自省API的包装,这里对BeanUtils.copyProperties的用法做一个小小的介绍. 通过函数名可以知道,copyProperties函数是对属性进 ...

  9. eclipse中jdk源码调试步骤

    分析源码是学习一项技术内幕最有效的手段.由于正常的引入JAr包源码没法进行对源码打断点,想要深入了解源码不方便.下面就开始介绍源码调试的步骤. 1.在eclipse新建一个JAVA项目compare_ ...

  10. delphi多语言

    LoadLangFromStrings http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Types.TLang http://blog.c ...