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 | publicclassStructureMapControllerFactory : DefaultControllerFactory |
09 | protectedoverrideIController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) |
11 | if(controllerType ==null)returnnull; |
15 | returnObjectFactory.GetInstance(controllerType)asController; |
17 | catch(StructureMapException) |
19 | System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); |
26 | publicclassStructureMapInitialize |
28 | publicstaticvoidInitialize() |
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(newMvcWeb.Ioc.StructureMapControllerFactory()); |
Step2:构建TestControler
03 | namespace MvcWeb.Controllers |
06 | publicclassTestController : Controller |
09 | privatereadonlyAnts.Provider.ICacheProvider _cache; |
10 | publicTestController(Ants.Provider.ICacheProvider cache) |
18 | publicActionResult Cache() |
20 | _cache.Insert("test","Hello Word"); |
21 | returnContent(_cache.Get("test").ToString()); |
Step3:直接浏览Test/Cache 就可以看到成功的显示“Hello World”.