您的位置:首页 > 其它

控制反转(IOC)

2013-01-15 11:47 99 查看
应用场景:view层某列,或某值有多个复杂的逻辑处理。

解决方法:

1.将所有逻辑处理抽象为一个接口。

2.将所有逻辑处理抽象为对应的业务处理。

3.将所有逻辑处理配置到XML中。

4.运行时自动调用所需要的逻辑处理。

对应代码:
1.将所有逻辑处理抽象为一个接口:

/// <summary>
/// 获取流程状态接口
/// </summary>
public interface IProjectMenu
{
string GetFlowState(string projectID, ref string[] relationIdIDs);
}

2.将所有逻辑处理抽象为对应的业务处理:

public class BoHTDC : IProjectMenu
{
public string GetFlowState(string projectID, ref string[] relationIdIDs)
{

      return ""

   }

  }

其他业务抽象类一样处理。

3.将所有逻辑处理配置到XML中:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<components>

<!--可研提交-->

<component id="BoLXKYTJ" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXKYTJ, Sinopec.IWMS.Business"></component>

<!--可研预审流程-->

<component id="BoLXKYYS" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXKYYS, Sinopec.IWMS.Business"></component>

<!--可研正式评审流程-->

<component id="BoLXKYZSPS" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXKYZSPS, Sinopec.IWMS.Business"></component>

<!--总体设计评审流程-->

<component id="BoLXZTSJPS" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXZTSJPS, Sinopec.IWMS.Business"></component>

<!-- 其他配置-->

</components>

</configuration>

4.运行时自动调用所需要的逻辑处理:

//建立容器

IWindsorContainer container = new WindsorContainer(new XmlInterpreter(path));

//获取组件(通过装载的Key,在以后的版本中可以通过接口类型来解析)

var menuService = container.Resolve(strClassName) as IProjectMenu;

menuService.GetFlowState(projectID, ref relationIds);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: