Я пытаюсь не повторять код, поэтому у меня есть метод, который выполняет быстрое преобразование свойства интерфейса.
У меня есть 3 конкретных класса, которые используют этот интерфейс, и я хочу, чтобы все они могли использовать этот метод.
Проблема возникает, когда я получаю один из этих объектов из сеанса. Я не вижу способа правильно разыграть его.
public ActionResult GetItems()
{
details = (IHeader<IDetail>)Session["SelectedHeader"].Details // Throws invalid cast
return Json(details);
}
// My interface and class examples:
interface IHeader<T> where T: IDetail
{
IList<T> Details { get; set; }
}
class ConcreteHeader : IHeader<ConcreteDetail>
{
public IList<ConcreteDetail> Items { get; set; }
}
class ConcreteDetail : IDetail
{
...
}
Я не могу использовать дженерики, потому что это метод действия в ASP.NET MVC 3 (если только в этом нет хитрости). Это возможно, или я должен написать метод для каждого класса?
РЕДАКТИРОВАТЬ: Не уверен, если это ясно из исходного вопроса:
То, что входит в сессию, это любой из конкретных объектов:
Session["SelectedHeader"] = new ConcreteHeader() { Details = new List<ConcreteDetail>() };