ASP. NET MVC & MEF - Сменная архитектура - PullRequest
0 голосов
/ 10 марта 2020

Я начал создавать Po C после SO этого поста , но мне не удалось получить очень базовый c образец для работы.

Что я сделал:

  • Я создал проект ASP. NET MVC, используя пустой шаблон и MVC ссылки.
  • Я добавил Bootstrapper, CustomControllerFactory и CustomViewEngine классы, а также соответствующие строки в Application_Start.
  • Я создал проект ASP. NET MVC, используя шаблон MVC.
  • Я добавил Export и PartCreationPolicy декораторы на HomeController.
  • Я опубликовал проект модуля в папке внутри / каталог Modules -in WebHost root path.

Что не удалось work:

  • Метод CompositionContainer.GetExportedValue выдает исключение, в котором говорится, что он не может загрузить один или несколько обязательных типов, и что имеется больше информации о свойстве LoaderExceptions. Это свойство является массивом с 77 экземплярами того же исключения:

    Could not load file or assembly Antlr3.Runtime, Version=3.4.1.9004, Culture=neutral, PublicKeyToken=eb42632606e9261f or one of its dependencies. В свойстве FusionLog я вижу, что проблема связана с версией сборки ( см. Здесь ).

  • Я нашел обходной путь для «решения» этого путем копирования объявлений dependentAssembly из web.config модуля в файл конфигурации WebHost. Однако я бы хотел этого избежать, так как WebHost не следует изменять в зависимости от потребностей модуля.
  • Даже после обходного пути он не работал. Во время рендеринга представление выдает это исключение:

    CS0234: The type or namespace name 'Optimization' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)

1 Ответ

0 голосов
/ 10 марта 2020

Для вашей помощи поделитесь полным тестовым проектом с использованием MEF. перейдите по этой github ссылке.

Вам нужно что-то вроде -

public class AzRDependencyResolver : System.Web.Http.Dependencies.IDependencyResolver, System.Web.Mvc.IDependencyResolver
    {
        private readonly CompositionContainer _container;

        public AzRDependencyResolver(CompositionContainer container)
        {
            _container = container;
        }

        public IDependencyScope BeginScope()
        {
            return this;
        }

        /// <summary>
        /// Called to request a service implementation.
        /// 
        /// Here we call upon MEF to instantiate implementations of dependencies.
        /// </summary>
        /// <param name="serviceType">Type of service requested.</param>
        /// <returns>Service implementation or null.</returns>
        public object GetService(Type serviceType)
        {
            if (serviceType == null)
                throw new ArgumentNullException("serviceType");

            var name = AttributedModelServices.GetContractName(serviceType);
            var export = _container.GetExportedValueOrDefault<object>(name);
            return export;
        }

        /// <summary>
        /// Called to request service implementations.
        /// 
        /// Here we call upon MEF to instantiate implementations of dependencies.
        /// </summary>
        /// <param name="serviceType">Type of service requested.</param>
        /// <returns>Service implementations.</returns>
        public IEnumerable<object> GetServices(Type serviceType)
        {
            if (serviceType == null)
                throw new ArgumentNullException("serviceType");

            var exports = _container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType));
            return exports;
        }

        public void Dispose()
        {
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...