2017-02-02 1 views
-1

Мне необходимо написать какое-то специальное промежуточное программное обеспечение для работы с EPMServer CMS. Я хотел бы удалить Application_Start() и запустить все из StartUp.Configuration()Удалите Global.asax и запустите EPiServer CMS MVC из Owin Startup.Configuration

Это кажется возможным с помощью приложения MVC 4 базовой линии, поскольку вы можете регистрировать маршруты и выполнять все необходимые задачи запуска, вызывая методы в Конфигурации().

Однако методы EPiServer для регистрации маршрутов и т.д. защищены (и я не знаю, все необходимые из них) .Я ожидают следующие преимущества, запустив приложение с запуском вместо Global.asax

  1. Если я могу контролировать, когда модули инициализации побежала, то я могу использовать расположение службы (ServiceLocator) в моем пользовательском промежуточном
  2. я уменьшить сложность, не имея два запускаемых точек для одного приложения

    Они являются важными мне. Я бы предпочел не использовать Application_Start(), если я абсолютно не обязан.

    Мое исследование выявило один из возможных способов сделать это с помощью EPiServer.ServiceAPi - но основная цель ServiceApi не будет использоваться в моем приложении. Кажется расточительным приводить его исключительно для совместимости с OWIN. Также у него есть зависимость провайдера OAuth, которую я не хочу заполнять в это время, поскольку мое приложение не требует этого. Кто-нибудь сделал это успешно? Может ли кто-нибудь предложить руководство? Я ценю ваше время, и я рад предоставить разъяснения по моему вопросу, когда это необходимо. Thanks

    Ниже приведены фрагменты кода: Обратите внимание на пространство имен на этом первом - кажется, наследует некоторые функции, а затем запускает типичный материал ASP.NET MVC.

    public class EPiServerApplication : EPiServer.Global 
    { 
        protected void Application_Start() 
        { 
         AreaRegistration.RegisterAllAreas();    
         var formatters = GlobalConfiguration.Configuration.Formatters; 
         var jsonFormatter = formatters.JsonFormatter; 
         var settings = jsonFormatter.SerializerSettings; 
         settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
         GlobalConfiguration.Configuration.Routes.MapHttpRoute(
          name: "DefaultApi", 
          routeTemplate: "api/{controller}/{id}", 
          defaults: new { id = RouteParameter.Optional } 
         );    
        } 
    } 
    

Здесь мы имеем типичную конфигурацию Owin запуска. Я бы хотел, чтобы приведенное выше было удалено, и используйте только ниже. Это можно сделать?

public class Startup 
{     
    public void Configuration(IAppBuilder app) 
    { 
     AreaRegistration.RegisterAllAreas(); 
     new EPiServer.ServiceApi.Startup().Configuration(app); 
     app.Use(typeof(CustomMiddleware)); 
    } 
} 
+0

Я бы порекомендовал искать «InitializationModule» для запуска приложений Episerver, особенно если вам нужны API-интерфейсы Episerver. В противном случае вы можете одновременно использовать как класс запуска OWIN, так и Global.asax. –

+1

@TedNyberg Это оказывается правильным для EPiServer. Если вы опубликуете это как ответ с несколькими дополнительными деталями, я приму это. В частности, имеет смысл выбросить OWIN и просто использовать InitializationModules. Существует модуль InitializationModule с HTTP-прослушивателем, который может использоваться для аппроксимации функциональности OWIN - хотя конвейер отличается. – user3702750

ответ

1

Я бы рекомендовал смотреть в InitializableModule для вещей, чтобы запустить при запуске EPiServer:

[InitializableModule] 
[ModuleDependency((typeof(EPiServer.Web.InitializationModule)))] 
public class MyInitializationModule : IInitializableModule 
{ 
    public void Initialize(InitializationEngine context) 
    { 
     // Your code here 
    } 
    public void Uninitialize(InitializationEngine context) 
    { 
    } 
} 

Атрибут ModuleDependency используется для указания того, что другой модуль инициализации должен быть загружен, прежде чем ваш код выполняется. Например, зависимость от EPiServer.Web.InitializationModule гарантирует, что вы можете вызвать API-интерфейс Episerver для работы с контентом в вашем коде.

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