У меня есть следующее отображение в моем 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 - то, что вызвало его - это работало хорошо целую вечность.
ОБНОВЛЕНИЕ:
Я зафиксировал его сам в конце. См. мой ответ ниже для деталей.
В конце концов я нашел для себя ответ, сравнив все классы / интерфейсы в отображении.
Ответ заключался в том, что аргумент универсального типа BasicRepository
имел общее ограничение следующим образом:
public class BasicRepository<TEntity> : IBasicRepository<TEntity>
where TEntity : class
{
... но интерфейс, который он реализовал, не имел такого же ограничения:
public interface IBasicRepository<T>
{
Я обновил интерфейс, чтобы он соответствовал:
public interface IBasicRepository<T>
where T : class
{
, и теперь все работает нормально.
Надеюсь, это кому-то поможет. :)