IOC依赖注入简单实例
转自:http://hi.baidu.com/xyz136299110/item/a32be4269e9d0c55c38d59e6
相信大家看过相当多的IOC依赖注入的例子。
但大家在没有明白原理的情况下,都或多或少有些疑问或者弄不明白程序逻辑。
其实说白了,所以的起点都依赖于XML文件。
下面给出一个非常简单的实例,(例子是说对数字,1-100,偶数的三项验证)
我们经常有有其中的一项或多项验证。那么我们该如何处理呢?抑或我们加入新的验证的时候如何才能最小的修改代码及程序逻辑呢?
怎么样才能使新的验证逻辑(A编写验证逻辑,B调用验证方法,那么当新的验证逻辑存在时,如何才能最小耦合呢??)
这就用到反射依赖注入了滴。
OK,贴上实例。
一、验证逻辑
1.数字验证
public class NumCheck:ICheck
{
public bool IsCheckRight(int Number)
{
Regex regex = new Regex("^[0-9]*$");
return regex.IsMatch(Number.ToString().Trim());
}
}
2.偶数验证
public class OSCheck:ICheck
{
public bool IsCheckRight(int Number)
{
bool flag=false;
int number = 0;
if (int.TryParse(Number.ToString(), out number))
{
if (number % 2 == 0)
{
flag = true;
}
}
return flag;
}}
3.范围验证
public class RangeCheck:ICheck
{
public bool IsCheckRight(int Number)
{
bool flag = false;
int number = 0;
if (int.TryParse(Number.ToString(), out number))
{
if (number >= 1 && number <= 100)
{
flag = true;
}
}
return flag;
} }
二。接口定义
public interface ICheck
{
/// 是否验证成功
bool IsCheckRight(int Number);
}
三.工厂反射
public static class AFactory
{
private static Hashtable bllList = null;
private static Object lockobj = new Object();
public static ICheck GetBLLInterface(string assemblyName, string bllClassName)
{
ICheck ret = null;
try
{
if (bllList == null)
{
bllList = new Hashtable();
}
if (bllList[assemblyName] == null)
{
lock (lockobj)
{
Assembly assembly = Assembly.Load(assemblyName);
ret = (ICheck)assembly.CreateInstance(bllClassName);
bllList.Add(assemblyName, assembly);
}
}
else
{
Assembly assembly = (Assembly)bllList[assemblyName];
ret = (ICheck)assembly.CreateInstance(bllClassName);
}
}
catch (Exception ex)
{
}
return ret;
}
}
四.注入点(XML文件此处)
<?xml version="1.0" encoding="utf-8" ?>
<DataKeys>
<add key="NumCheck" value="Com.Area.DAL.NumCheck"></add>
<add key="OSCheck" value="Com.Area.DAL.OSCheck"></add>
<add key="RangeCheck" value="Com.Area.DAL.RangeCheck"></add>
</DataKeys>
五.统一的验证逻辑类
public class BaseCheck
{
private static readonly string Path = "Com.Area.DAL";
public static ICheck GetIcheck(string CheckKey)
{
string ClassName = string.Empty;
DataSet ds = new DataSet();
if (!string.IsNullOrEmpty(CheckKey))
{
ds.ReadXml("../../Check.xml");
ClassName = ds.Tables[0].Rows[Convert.ToInt32(CheckKey)-1][1].ToString().Trim();
return AFactory.GetBLLInterface(Path, ClassName) as ICheck;
}
else
return null;
}
public static bool Check(int Number,ref string Msg)
{
bool flag = true;
string ClassName = string.Empty;
DataSet ds = new DataSet();
ds.ReadXml("../../Check.xml");
for (var i = 0; i < ds.Tables[0].Rows.Count; i++)
{
ClassName = ds.Tables[0].Rows[i][1].ToString().Trim();
ICheck check = AFactory.GetBLLInterface(Path, ClassName) as ICheck;
if (!check.IsCheckRight(Number))
{
flag = false;
Msg = "验证失败";
break;
}
}
return flag;
}
}
六.操作界面
代码如下:
private void button1_Click(object sender, EventArgs e)
{
btnClick(button1);
}
private void button4_Click(object sender, EventArgs e)
{
if (this.textBox1.Text == "" || this.textBox1.Text.Length <= 0)
{
MessageBox.Show("ERROR");
}
else
{
string Mesg = string.Empty;
if (!BaseCheck.Check(Convert.ToInt32(this.textBox1.Text), ref Mesg))
{
MessageBox.Show(Mesg);
}
else { MessageBox.Show("Right"); }
}
}
private void button3_Click(object sender, EventArgs e)
{
btnClick(button3);
}
private void button2_Click(object sender, EventArgs e)
{
btnClick(button2);
}
private void btnClick(Button btn)
{
if (this.textBox1.Text == "" || this.textBox1.Text.Length <= 0)
{
MessageBox.Show("ERROR");
}
else
{
string Tag = btn.Tag.ToString().Trim();
ICheck check = BaseCheck.GetIcheck(Tag);
if (check.IsCheckRight(Convert.ToInt32(this.textBox1.Text)))
{
MessageBox.Show("验证成功");
}
else { MessageBox.Show("Error!"); }
}
}
IOC依赖注入简单实例的更多相关文章
- IoC 依赖注入容器 Unity
原文:IoC 依赖注入容器 Unity IoC 是什么? 在软件工程领域,“控制反转(Inversion of Control,缩写为IoC)”是一种编程技术,表述在面向对象编程中,可描述为在编译时静 ...
- springboot启动流程(九)ioc依赖注入
所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 正文 在前面的几篇文章中,我们多次提到这么一个转化过程: Bean配置 --> Bean ...
- Spring学习-spring核心机制-IOC依赖注入
转载自:http://www.cnblogs.com/chenssy/archive/2012/11/11/2765266.html 今天复习一下spring两大特性之一:IOC依赖注入,看了一下大佬 ...
- Spring依赖注入 --- 简单使用说明
Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...
- ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用
上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...
- ASP.NET MVC IOC依赖注入之Autofac系列(一)- MVC当中应用
话不多说,直入主题看我们的解决方案结构: 分别对上面的工程进行简单的说明: 1.TianYa.DotNetShare.Model:为demo的实体层 2.TianYa.DotNetShare.Repo ...
- Spring-DI控制反转和IOC依赖注入
Spring-DI控制反转和IOC依赖注入 DI控制反转实例 IDEAJ自动导入Spring框架 创建UserDao.java接口 public interface UserDao { public ...
- Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)
关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...
- Spring.NET 的IOC(依赖注入)
(1) ioc,意思是Inversion of control,(反转控制),控制反转,就是交换控制权的意思.现在一般不使用这个词,一般使用dependency injection(依赖注入).依赖 ...
随机推荐
- JavaScript学习之DIV层与图像
DIV层与图像 一.设计一个可定位的层 1.设置位置(position)和大小 (1)绝对定位(absolute):以页面边框为参照,只要设置好绝对位置,那么元素的位置会始终固定在距离边框某个位置的距 ...
- UpdatePanel AsyncPostBackTrigger PostBackTrigger 区别
1.使用代码的方式进行编写. 2. Trigger属性: 1)AsyncPostBackTrigger :只是UpdatePanel中指定的进行了局部刷新. 2)PostBackTrigger : 整 ...
- 微信小店 API 手册
微信商铺API手册V1.13 目录 1. 商品管理接口.................................................................... ...
- 面向对象编程(八)——this关键字
很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚. this(隐式参数) 普通方法中,this总是指向当前调用该方法的对象. 构造方法中,this总是指向正要初始 ...
- 如何让CRectTracker的m_rect不超出一定的范围,比如screen或者某个document的范围
最近在尝试做一个QQ截图那样的工具,其中一个功能就是要做一个选择框,自然用到了CRectTracker 但是有一个很关键的东西就是,拖拽CRectTracker的时候,不能让CRectTracker“ ...
- 苹果API常用英语名词
0. indicating决定 1.in order to 以便 2.rectangle bounds 矩形尺寸 3.applied 应用 4.entirety全部 5.technique 方法 6. ...
- Java- 基本封装
package test.studet_manager; public class Student { static int num = 100; // 编号-->唯一的 private int ...
- [Sublime Text] How to Install Sublime Text on Ubuntu
For Sublime-Text-2: sudo add-apt-repository ppa:webupd8team/sublime-text- sudo apt-get update sudo a ...
- MVC4之ModelBinder-模型绑定
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 最近在做自学MVC,遇到的问题很多,索性一点点总结 ...
- php 调用 java 接口
php 需要开启 curl模块 /** HTTP 请求函数封装*/function http_request_cloudzone($url, $data){ //var_dump($url." ...