Внедрить строго типизированный экземпляр с структурой - PullRequest
1 голос
/ 08 июня 2011

У меня есть этот интерфейс 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 голосов
/ 08 июня 2011

Вы можете сделать ваши контроллеры общими, чтобы они работали с конкретным типом 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.Я не думаю, что вам нужна пустая модель, но вам придется обрабатывать это в ваших регистрациях в структурной карте, определяя их область в сеансе или запрос, например.

...