我有这个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对象具有正确的模型实例
答案 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实例的控制器。我不认为你想要一个空模型,但你必须在结构图中的注册中处理这个问题,方法是在会话或请求中对它们进行范围设定。