【MVC整理】1.使用 StructureMap 作为 ASP.NET MVC 的 DI 框架

StructureMap 是一个非常灵巧的IOC框架,与asp.net MVC 更是很好的集成。

准备:

下载StructureMap,基本实例中只需要引用StructureMap.dll文件,并引用命名空间StructureMap
下面是我们需要使用IoC的示例代码,我们要创建TestController,希望通过IoC为TestController的构造函数提供Ants.Provider.ICacheProvider的实例对象。

Step1:

用StructureMapControllerFactory代替默认的DefaultControllerFactory,以及StructureMap的初始化,并在Application_Start()进行注册。

1.StructureMapControllerFactory代替默认的DefaultControllerFactory以及StructureMap的初始化

01using System;
02using System.Web.Mvc;
03using StructureMap;
04namespace MvcWeb.Ioc
05{
06    //用StructureMap接管MVC中的Controller的创建工作
07    publicclassStructureMapControllerFactory : DefaultControllerFactory
08    {
09        protectedoverrideIController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
10        {
11            if(controllerType ==null)returnnull;
12 
13            try
14            {
15                returnObjectFactory.GetInstance(controllerType)asController;
16            }
17            catch(StructureMapException)
18            {
19                System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
20                throw;
21            }
22        }
23        
24    }
25    //初始化StructureMap,注入相关对象
26    publicclassStructureMapInitialize
27    {
28        publicstaticvoidInitialize()
29        {
30            ObjectFactory.Initialize(
31                x => {
32                    x.For<Ants.Provider.IAuthenticateProvider>().Singleton().Use<Ants.Provider.CustomAuthenticateProvider>();
33                    x.For<Ants.Provider.ICacheProvider>().Singleton().Use<Ants.Provider.AspNetCacheProvider>();                  
34                }
35                );        }       
36    }
37}

2.在Application_Start()进行注册

01protected void Application_Start()
02        {
03            AreaRegistration.RegisterAllAreas();
04 
05            RegisterRoutes(RouteTable.Routes);
06            //初始化StructureMap
07            MvcWeb.Ioc.StructureMapInitialize.Initialize();
08 
09            //注册StructureMapControllerFactory以代替DefaultControllerFactory
10            ControllerBuilder.Current.SetControllerFactory(newMvcWeb.Ioc.StructureMapControllerFactory());
11 
12        }

Step2:构建TestControler

01using System.Web.Mvc;
02 
03namespace MvcWeb.Controllers
04{   
05    [HandleError]
06    publicclassTestController : Controller
07    {
08        //_cache将会被自动注入
09        privatereadonlyAnts.Provider.ICacheProvider _cache;
10        publicTestController(Ants.Provider.ICacheProvider cache)
11        {
12            this._cache = cache;
13        }
14 
15        /**********************************************
16        Test/Cache
17        **********************************************/
18        publicActionResult Cache()
19        {
20            _cache.Insert("test","Hello Word");
21            returnContent(_cache.Get("test").ToString());
22        }
23    }
24}
Step3:直接浏览Test/Cache 就可以看到成功的显示“Hello World”.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值