2017-02-02 1 views
-1

EPiServer CMS에서 작동하도록 사용자 정의 미들웨어를 작성해야합니다. 내가 Application_Start()를 제거하고 StartUp.Configuration()에서 모든 것을 실행하고 싶습니다.Owin Startup에서 Global.asax를 제거하고 EPiServer CMS MVC를 실행하십시오. 구성

이것은 기본 MVC 4 응용 프로그램에서 가능합니다. 경로를 등록하고 Configuration 내의 메소드를 호출하여 필요한 모든 시작 작업을 수행 할 수 있기 때문입니다.().

그러나 경로를 등록 등을위한 EPiServer의 방법은 보호 (내가 필요한 것들 모두를 모르는) .I이

    을 시작으로 응용 프로그램을 실행하는 대신 Global.asax에 의해 다음과 같은 이점을 예상
  1. 내가 초기화 모듈이 실행되면, 그때는
  2. 내가 같은 응용 프로그램

    이 모두 중요한 두 응용 프로그램의 시작 지점을 가지고 있지 복잡성을 감소 내 사용자 지정 미들웨어에서 서비스 위치 (ServiceLocator)를 사용하여 제어 할 수있는 경우 나에게. 내가 절대적으로해야하지 않는 한 Application_Start()를 사용하지 않는 것을 선호합니다.

    내 연구에 따르면 EPiServer.ServiceAPi를 사용하여이 작업을 수행 할 수있는 잠재적 인 방법이 하나 밝혀졌지만 ServiceApi의 핵심 용도는 내 앱에서 사용되지 않습니다. 오윈 (OWIN) 호환성을 위해 순수하게 그것을 가져 오는 것은 낭비입니다. 또한 그것은 내 애플 리케이션이 그것을 필요로하지 않기 때문에 내가 현재 채우고 싶지 않은 OAuth 공급자 의존성을 가지고있다. 누구든지 성공적으로이 일을 했습니까? 누구든지지도를 제공 할 수 있습니까? 시간 내 주셔서 감사 드리며 필요한 경우 제 질문에 대한 설명을 제공해 드리겠습니다. 감사합니다

    다음은 코드 단편입니다. 이 첫 번째 네임 스페이스에 유의하십시오 - 일부 기능을 상속 한 다음 일반적인 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 시작 구성을 가지고있다. 위의 내용을 삭제하고 아래 내용 만 사용하고 싶습니다. 할 수 있습니까? 일이 Episerver 시작에서 실행하는

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

특히 Episerver API를 사용할 수 있어야하는 경우 Episerver 시작시 실행되는 항목에 대해 'InitializationModule'을 살펴 보는 것이 좋습니다. 그렇지 않으면 OWIN 시작 클래스와 Global.asax를 동시에 사용할 수 있습니다. –

+1

@TedNyberg 이것은 EPiServer에서 올바른 것으로 밝혀졌습니다. 이것을 몇 가지 추가 답변으로 게시하면 받아 들일 것입니다. 특히 OWIN을 버리고 InitializationModules 만 사용하는 것이 좋습니다. 파이프 라인이 다르긴하지만 OWIN 기능을 근사화하는 데 사용할 수있는 HTTP Listener가있는 InitializationModule이 있습니다. – user3702750

답변

1

나는 InitializableModule에보고 권하고 싶습니다 다음 ModuleDependency 속성이 코드가 실행되기 전에 다른 초기화 모듈이로드되어 있어야 지정하는 데 사용됩니다

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

. 예를 들어, EPiServer.Web.InitializationModule에 대한 의존성은 Episerver API를 호출하여 코드의 내용에 대한 작업을 보장합니다.