2014-10-09 4 views
4

Все Сообщение об ошибке:модель элемент передается в словарем типа ..., но этот словарь требует ...

The model item passed into the dictionary is of type 
'MyClass`2[Implementation1,Implementation2]', 
but this dictionary requires a model item of type 
'MyClass`2[Interface1,Interface2]'. 

На мой взгляд, у меня есть модель заявление:

@model MyClass<Interface1, Interface2> 

Где MyClass является класс и Interface1 и Interface2 интерфейсы

на мой контроллер действий я звоню:

return View(model); 

где: модель имеет тип ...

MyClass<Implementation1,Implementation2> 

... и реализует выполнения решений1 Интерфейс1 и выполнения решений2 орудия Interface2

Есть ли способ чтобы избежать этой ошибки, не объявляя мою модель ниже?

@model MyClass<Implementation1, Implementation2> 
+0

Любой причину, вы не можете сделать свое использование модели 'MyClass '? – DavidG

ответ

3

Поскольку MyClass является инвариантно вы не можете сделать это, это означает, что MyClass<Implementation1, Implementation2> не MyClass<Interface1, Interface2>, следовательно, ошибка.

Поскольку это не интерфейс или делегат, класс не может быть объявлен как covariant. Хотя вы можете создать интерфейс и сделать его ковариантен помощью out keyword:

public interface IMyClass<out T1, out T2> 
{ 
    ... 
} 

public class MyClass<T1, T2> : IMyClass<T1, T2> 
{ 
    ... 
} 

Модели декларации в представлении:

@model IMyClass<Interface1, Interface2> 
+0

Спасибо! Кажется, у меня проблемы с дизайном. «Интерфейс1» и «Интерфейс2» - это типы свойств на «MyClass», которые я хотел бы использовать на моем представлении. И я могу объявить их в «IMyClass» только в том случае, если они доступны только для чтения, поэтому htey не будет сериализуемым! –

+0

@ LeopoldoWagner, это выходит за рамки оригинального вопроса. Отправьте другой вопрос, и SO сообщество будет рада помочь. – Zabavsky

+0

@ Zabavsky Приятно знать, что, хороший ответ +1. –

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

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