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的初始化
07 | public class StructureMapControllerFactory : DefaultControllerFactory |
09 | protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) |
11 | if (controllerType == null ) return null ; |
15 | return ObjectFactory.GetInstance(controllerType) as Controller; |
17 | catch (StructureMapException) |
19 | System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); |
26 | public class StructureMapInitialize |
28 | public static void Initialize() |
30 | ObjectFactory.Initialize( |
32 | x.For<Ants.Provider.IAuthenticateProvider>().Singleton().Use<Ants.Provider.CustomAuthenticateProvider>(); |
33 | x.For<Ants.Provider.ICacheProvider>().Singleton().Use<Ants.Provider.AspNetCacheProvider>(); |
2.在Application_Start()进行注册
01 | protected void Application_Start() |
03 | AreaRegistration.RegisterAllAreas(); |
05 | RegisterRoutes(RouteTable.Routes); |
07 | MvcWeb.Ioc.StructureMapInitialize.Initialize(); |
10 | ControllerBuilder.Current.SetControllerFactory( new MvcWeb.Ioc.StructureMapControllerFactory()); |
Step2:构建TestControler
03 | namespace MvcWeb.Controllers |
06 | public class TestController : Controller |
09 | private readonly Ants.Provider.ICacheProvider _cache; |
10 | public TestController(Ants.Provider.ICacheProvider cache) |
18 | public ActionResult Cache() |
20 | _cache.Insert( "test" , "Hello Word" ); |
21 | return Content(_cache.Get( "test" ).ToString()); |
Step3:直接浏览Test/Cache 就可以看到成功的显示“Hello World”.