StructureMap,MVC和ObjectInstantiation

时间:2013-07-12 12:16:45

标签: asp.net-mvc-4 structuremap

我使用StructureMap作为DI与MVC 4.我通过StructureMap在构造函数中推送某些对象。

我已经进入了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实例化对象的方式?

如果我不是很清楚,请告诉我?

谢谢,

A

1 个答案:

答案 0 :(得分:1)

您只需要配置StructureMap以了解您的ISomeService以及如何实例化它:

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

这将在实例化控制器时调用工厂方法,因为您的控制器已由StructureMap创建。