2017-02-02 10 views
-1

EPiServer CMSで動作するカスタムミドルウェアを作成する必要があります。私はApplication_Start()を削除してStartUp.Configuration()からすべてを実行したいと思います。Owin Startup.ConfigurationからGlobal.asaxを削除してEPiServer CMS MVCを実行

これは、コンフィグレーション内のメソッドを呼び出すことによってルートを登録し、必要な起動タスクをすべて行うことができるため、 ()。

しかし、ルートを登録し、などのためEPiServerのメソッドが保護されている(と私は必要なもののすべてを知りません).I起動してアプリを実行することにより、次のような利点が予想される代わりに、Global.asaxの

  1. 初期化モジュールが実行されたときに私がコントロールできるならば、私は私のカスタムミドルウェア
  2. にサービスの場所(のServiceLocator)を使用することができます私は、同じアプリのための2つのアプリケーションの開始点を持っていないことにより、複雑さを減らす

    これらは両方とも重要であり、私に。私は絶対にしなければ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リスナを持つ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を呼び出してコード内のコンテンツを操作できます。

関連する問題