StructureMap使用说明

最近项目中使用了StructureMap接口映射,需要简单配置;配置好了使用起来也很方便,也利于以后直接扩展修改某一个接口的实现文件。

1.web.config 中添加设置。

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="StructureMap" type="StructureMap.Configuration.StructureMapConfigurationSection,StructureMap"/>
  </configSections>

  <StructureMap MementoStyle="Attribute">
    <DefaultInstance PluginType="AZKA.IMS.Model.ICommRepository, AZKA.IMS.Model" PluggedType="AZKA.IMS.SqlRepository.CommRepository, AZKA.IMS.SqlRepository" Scope="Singleton"/>
  </StructureMap>
</configuration> 

解释:

StructureMap 的 DefaultInstance配置项目,PluginType属性是接口类型,接口名词空间,PluggedType属性是接口实现类,实现类名词空间;Scope是设置的控件模式。

生命周期
StructureMap容器托管的对象,生命周期支持以下几种(xml中的Scope配置,或者是初始化时的相关方法例如CacheBy进行设置)
PerRequest: 每次请求都新建一个实例对象
Singleton: 单例
ThreadLocal: 每线程对应一个实例
HttpContext: 在一个HttpContext上唯一
HttpSession: 在一个HttpSession上唯一
Hybrid: 混合模式,如果存在HttpContext则设置在HttpContext上,否则设置在当前线程上
另外StructureMap也支持使用自定义的生命周期,实现StructureMap.Pipeline.ILifecycle接口即可。

2.增加一个Ioc接口容器配置器的类:

可以放在Web项目的App_Code中:

    /// <summary>
    /// Summary description for IocConfigurator
    /// </summary>
    public class IocConfigurator
    {
        /// <summary>
        /// Configures this instance.
        /// </summary>
        public static void Configure()
        {
            ObjectFactory.Initialize(x =>
            {
                x.PullConfigurationFromAppConfig = true;

                x.SetAllProperties(y =>
                {
                    y.OfType<ICommRepository>();
                });
            });
        }

3.Global.asax需要执行IocConfigurator类的配置初始化方法:

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
        IocConfigurator.Configure();
        //log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("~")+@"\log4net.config"));
    }

4.页面PreLoad加载:

首先Web项目需要加载SturctureMap.dll.

        protected override void OnPreLoad(EventArgs e)
        {
            base.OnPreLoad(e);
            StructureMap.ObjectFactory.BuildUp(this);
        }

页面中增加接口操作变量:

        public ICommRepository CommRepositoryOper { get; set; }
在页面的事件中可直接使用CommRepositoryOper 来执行方法。

        private void InitData()
        {
            #region Header

            //initial hospital data
            ddlHospital.ItemsClear();
            List<Hospital> listHosp = CommRepositoryOper.GetHospitalByUser(CreatedBy).ToList();
            ddlHospital.DataSource = listHosp;
            ddlHospital.DataValueField = "HospitalId";
            ddlHospital.DataTextField = "HospitalName";
            ddlHospital.DataBind();
            ddlHospital.ItemsInsert(0, new ListItem("请选择", "0"));

            #endregion
       }

至此,从配置SturctureMap到使用完成。

参考:http://www.cnblogs.com/RicCC/archive/2010/04/01/structuremap-demo.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值