2011-01-09 2 views
0

Я пытаюсь создать URL маршрутизации с сильно типизированных объектов для страниц, но я получаю пустой объект на первой линии, так что это сбойURL маршрутизации с сильно типизированных объектов

//Getting the suitable executing Page 
var display = BuildManager.CreateInstanceFromVirtualPath(_virtualPath,typeof(Page)) as IProfileHandler; 
//Setting Page Parameters 
display.MemberId = Convert.ToInt32(requestContext.RouteData.Values["ID"]); 
//Return Page 
return display; 

public interface IProfileHandler : IHttpHandler 
{ 
    int MemberId 
    { 
     get; 
     set; 
    } 
} 
+0

Какое значение null? отображение или запросКонтекст? Если это отображение, когда вы отлаживаете менеджер сборки, возвращающий объект, но это просто не тип IProfileHandler? – Vadim

+0

display is null, Он возвращает null, когда я выполняю листинг в iprofilehandler, он возвращает указанный объект, когда я выполняю листинг в ihttphandler – user510336

ответ

1

для тех, кто проходит мимо здесь, вот что я сделал, я добавил несколько свойств моей страницы класса и я литья в этот класс, который кажется хорошей и приятной идеей.

0

CreateInstanceFromVirtualPath не возвращает объект, который реализует IProfileHandler.

Edit:

Вы пытаетесь бросить обратный объект в IProfileHandler. Это означает, что вы говорите «Ok Compiler, я знаю, что этот метод возвращает object, но я обещаю, что это уже экземпляр, который реализует IProfileHandler». Поскольку метод CreateInstanceFromVirtualPath был создан без знания вашего пользовательского класса, у него нет способа вернуть объект, который гарантированно будет следовать контракту, установленному вашим пользовательским интерфейсом (имеет свойство int MemberId). Поскольку объект не может быть правильно установлен, и вы используете оператор as, вы получаете нуль. Если бы вы сделали обычный бросок, то было бы выброшено InvalidCastException.

Я не уверен, что я соответствующий человек, чтобы ответить, как вы его реализуете, так как я никогда не работал с HttpHandlers, но, согласно this documentation, похоже, что вы создали бы класс, который реализует IHttpHandler, измените ваш web.config, чтобы использовать новый обработчик, а затем перевести его в новый класс. Может быть что-то вроде

public class ProfileHttpHandler: IHttpHandler 
{ 
    public int MemberId { get; set; } 

    public bool IsReusable 
    { 
     get 
     { 
      // return value here 
     } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     // custom request processing here 
    } 
} 

с записью web.config из

<configuration> 
    <system.web> 
     <httpHandlers> 
     <add verb="*" path="*.yourIntendedExtension" type="FQN, Assembly" /> 
     </httpHandlers> 
    </system.web> 
</configuration> 
+0

Он возвращает объект, реализующий ihttphandler, и я создаю интерфейс, который реализует iprofilehandler, почему он не работает?! ? и если он не работает, какой метод я буду использовать? – user510336

+0

См. Обновленный ответ. – Chris

+0

@ user510336 ... попробуйте снова прочитать это предложение (и снова и снова) ... теперь, ответьте мне. Что общего между двумя классами? ... теперь вы можете бросить, ЧТО ОНИ ИМЕЮТСЯ В ОБЩЕМ, ничто другое. –

Смежные вопросы