我使用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
答案 0 :(得分:1)
您只需要配置StructureMap以了解您的ISomeService以及如何实例化它:
ObjectFactory.Initialize(IE =>
{
IE.For<ISomeService>().Use(() => CommonGateway.GetChannel<ISomeService>() as ISomeService);
});
这将在实例化控制器时调用工厂方法,因为您的控制器已由StructureMap创建。