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(依赖注入).依赖 ...
随机推荐
- SQL Server 2008 R2[ALTER]列属性修改
1:向表中添加字段 Alter table [表名] add [列名] 类型 2: 删除字段 Alter table [表名] drop column [列名] 3: 修改表中字段类型 (可以修 ...
- Maven-002-eclipse 插件安装及实例
因为平常编码的时候,习惯了使用 eclipse 进行编码,因而需要将 eclipse 安装 maven 的插件,安装步骤如下所示: 一.安装 选择菜单: help -> Install New ...
- 人脸识别的ppt
http://wenku.baidu.com/link?url=GWiNRy_9mzqBZ9_2DDZbHRZbBbaBofhs1Y0pBS7aiE5oab8TY78r_z6aAlqo_L9AZzD4 ...
- Docker镜像的创建、存出、载入
创建镜像的方法有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建,本博文讲解前两种. 基于已有镜像的容器创建 该方法是使用docker commit命令,其命令格式为: ...
- js 如何清除setinterval
var id=window.setInterval(function(){ },1000);window.clearInterval(id);
- jquery在线预览PDF文件,打开PDF文件(向下兼容ie8、ie7)
最主要的是使用到了一个jquery的插件jquery.media.js,使用这个插件就很容易实现了. 核心代码 <!DOCTYPE html PUBLIC "-//W3C//DTD X ...
- python_条件、循环语句
1. python中语句块如何定义: 在Python中,冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的.当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束. 默认推荐缩进 ...
- docker note
docker --bip="10.1.42.1/16" -d 挂载宿主机目录 Docker支持挂载宿主机目录,支持宿主机目录和容器之间文件目录进行映射,彼此共享: docker r ...
- Java基础之线程——管理线程同步代码块(BankOperation4)
控制台程序. 除了同步类对象的方法之外,还可以把程序中的语句或代码块制定为synchronized,这种方式更强大,因为可以指定哪个对象从语句或代码块的同步中获益,而不像同步方法那样仅仅是包含代码的对 ...
- 6.理解DispatcherServlet
DispatcherServlet的作用 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,负责职责的分派, 且与Spring IoC容器无缝 ...