使用structuremap注入强类型实例

时间:2011-06-08 08:51:25

标签: asp.net-mvc-3 dependency-injection structuremap

我有这个IPageModel接口,它是我项目中所有模型的基础。 当前模型是RouteData的一部分,我想将此实例注入我的控制器。

这就是我今天的表现

x.For<IPageModel>().UseSpecial(y => y.ConstructedBy( r => ((MvcHandler) HttpContext.Current.Handler).RequestContext.RouteData.GetCurrentModel<IPageModel>(‌​)));

是否可以告诉structuremap注入正确的类型而不是IPageModel?

有几个例子是这样的:

public HomeController(Home model) {
// Home implements IPageModel
}

public PageController(Page model) {
// Page implements IPageModel
}

RouteData对象具有正确的模型实例

1 个答案:

答案 0 :(得分:0)

您可以使控制器具有通用性,因此它们可以使用特定类型的IPageModel。

所以你会有 HomeController<Home>PageController<Page>

如果你从一个只有一个带有1个参数的构造函数(一个T实例)的基类派生它们,那么:

public abstract class BaseController<T> where T : IPageModel  
{  
    protected T Model { get; private set; }  

    public BaseController(T model)  
    {  
        Model = model;  
    }

通过这种方式,您将获得一个带有新构造的(例如)Home实例的控制器。我不认为你想要一个空模型,但你必须在结构图中的注册中处理这个问题,方法是在会话或请求中对它们进行范围设定。