Обновление замка Windsor вызывает TypeLoadException для универсальных типов

У меня есть следующее отображение в моем XML-файле замка Windsor, который работал хорошо (неизменный) в течение некоторого времени:


Я получил это из Виндзорской документации по http://www.castleproject.org/container/documentation/v1rc3/usersguide/genericssupport.html.

Так как я обновил Виндзор, я теперь получаю следующее исключение во времени выполнения:

Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Рассмотрите отслеживание стека для получения дополнительной информации об ошибке и где это произошло в коде.

Детали исключения: Система. TypeLoadException: GenericArguments[0], 'T', на 'MyApp. Модели. Репозитории. Linq. BasicRepository '1 [TEntity]' нарушает ограничение параметра типа 'TEntity'.

Исходная ошибка:

Строка 44: общедоступный статический пустой ConfigureIoC ()
Строка 45: {
Строка 46: var Виндзор = новый WindsorContainer ("Windsor.xml");
Строка 47:
Строка 48: ServiceLocator. SetLocatorProvider (() => новый WindsorServiceLocator (Виндзор));

Я использую ASP.NET MVC 1.0, Visual Studio 2008 и замок Windsor, как загружено с http://sourceforge.net/projects/castleproject/files/InversionOfControl/2.1/Castle-Windsor-2.1.1.zip/download

Кто-либо может пролить какой-либо свет на это? Я уверен, что обновление замка Windsor - то, что вызвало его - это работало хорошо целую вечность.

ОБНОВЛЕНИЕ:
Я зафиксировал его сам в конце. См. мой ответ ниже для деталей.

5
задан Community 23 May 2017 в 10:32
поделиться

1 ответ

В конце концов я нашел для себя ответ, сравнив все классы / интерфейсы в отображении.

Ответ заключался в том, что аргумент универсального типа BasicRepository имел общее ограничение следующим образом:

public class BasicRepository<TEntity> : IBasicRepository<TEntity>
    where TEntity : class
{

... но интерфейс, который он реализовал, не имел такого же ограничения:

public interface IBasicRepository<T>
{

Я обновил интерфейс, чтобы он соответствовал:

public interface IBasicRepository<T>
    where T : class
{

, и теперь все работает нормально.

Надеюсь, это кому-то поможет. :)

8
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: