2015-11-03 3 views
0

Я разрабатываю приложение с помощью модулей. Каждый модуль соответствует устаревшей системе, которую мы имеем здесь в компании. Использование кода, как это, я могу впрыснуть контроллеры из библиотеки классов в приложение MVC с помощью Unity Container:Можно ли вводить маршрут, используя контейнер Unity?

using System.Linq; 
using System.Web.Mvc; 
using Microsoft.Practices.Unity.Mvc; 

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyProject.Common.UnityMvcActivator), "Start")] 
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(MyProject.Common.UnityMvcActivator), "Shutdown")] 

namespace MyProject.Common 
{ 
    public static class UnityMvcActivator 
    { 
     /// <summary>Integrates Unity when the application starts.</summary> 
     public static void Start() 
     { 
      var container = UnityConfig.GetConfiguredContainer(); 

      FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); 
      FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 

      DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

      // TODO: Uncomment if you want to use PerRequestLifetimeManager 
      // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 
     } 

     /// <summary>Disposes the Unity container when the application is shut down.</summary> 
     public static void Shutdown() 
     { 
      var container = UnityConfig.GetConfiguredContainer(); 
      container.Dispose(); 
     } 
    } 
} 

Этот код автоматически добавляется в библиотеку классов при установке the Unity.Mvc bootstrapper.

Все библиотеки классов, реализованные в виде модулей, будут ориентированы на веб-сайты.

Работает как шарм, но я все еще должен определить все маршруты в RouteConfig из приложения MVC. Моя задача - определить эти маршруты в библиотеке классов. Я не нашел никаких объяснений, как это сделать.

Возможно ли это? Если да, то как?

ответ

0

Я бы переделал дизайн, если это возможно. Я бы рекомендовал вставлять общие компоненты в библиотеку классов в контроллеры приложений, но контроллеры и конфигурация приложения должны оставаться вне модулей. Такие пользовательские интерфейсы должны быть специфичными для приложения.

Что касается контейнера, я бы рекомендовал иметь единую конфигурацию для каждой сборки, но не ссылаться на контейнер в модулях (сделать это, чтобы сделать контейнер локатором службы). Вместо этого создайте класс конфигурации, специфичный для модуля, в каждой сборке, и при запуске приложения контейнер из приложения UI настроится на конфигурацию каждой сборки (вы будете полагаться на отражение или подобное для доступа к конфигурациям).

Пример (ответ, который использует UnityContainerExtension): IoC in class library. Where to bootstrap

+0

Ну, цель точно вводить новые контроллеры из библиотеки классов для веб-приложений. Контроллеры имеют префикс идентификатора модуля. Я хотел бы иметь некоторые примеры кода в ответе. Спасибо. –

+0

@CiganoMorrisonMendez Ваша сложность в настройке маршрутов из зависимой сборки является признаком того, что вы должны придерживаться другого подхода. Библиотека классов не должна быть веб-зависимой. – moarboilerplate

+0

@CiganoMorrisonMendez пример кода для инъекционного подхода. Я рекомендую ответ в ссылке, использующей 'UnityContainerExtension'. – moarboilerplate

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