2013-07-12 35 views
0

我使用StructureMap作爲DI和MVC 4.我通過StructureMap在構造函數中推送某些對象。StructureMap,MVC和ObjectInstantiation

繼我在的bootstraper

public static void ConfigureDependencies() 
{ 
     ObjectFactory.Initialize(IE => 
     { 
      IE.UseDefaultStructureMapConfigFile = true; 
     }); 
} 

器廠是如下

public class ControllerMyFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) 
    { 
     return ObjectFactory.GetInstance(controllerType) as IController; 
    } 
} 

然後我在Global.asax中

BootStrapper.ConfigureDependencies(); 
ControllerBuilder.Current.SetControllerFactory(new ControllerMyFactory()); 

繼堵塞,這是一個我的控制器

public class SomeController : Controller 
{ 
    ISomeService service; 
    public SomeController(ISomeService service) 
    { 
      this.service = service; 
    } 
} 

現在我的問題是對象實例化,它正在構造函數中傳遞。 我用來構建這個對象像下面

ISomeService service = CommonGateway.GetChannnel<ISomeService>(); 

如何插件這與StructureMap?我如何改變StructureMap實例化對象的方式?

如果我不是很清楚,請讓我知道嗎?

感謝,

一個

回答

1

你只需要StructureMap配置瞭解您的ISomeService以及如何實例化這樣的:

ObjectFactory.Initialize(IE => 
{ 
    IE.For<ISomeService>().Use(() => CommonGateway.GetChannel<ISomeService>() as ISomeService); 
}); 

這會接着調用你的工廠方法實例化時你的控制器,因爲你的控制器已經由StructureMap創建。