2017-02-27 6 views
0

Umbraco v7.5.8ApplicationEventHandlerの依存性注入。バグ?

私はDIセットアップ(下記参照)に問題があります。

1)コンストラクタがパラメータを取る場合、OnApplicationInitializedもOnApplicationStarted(および他の)イベントも起動しません。

2)バックオフィスが壊れています。コンテンツノードにアクセスすることはできません。例外メッセージ: 'ContentController'タイプのコントローラを作成しようとしたときにエラーが発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認します。

// Application handlers 
    public class UmbracoApplicationEventHandler : IApplicationEventHandler 
    { 
     private IMenuManager _menuManager; 

     public UmbracoApplicationEventHandler(IMenuManager menuManager) 
     { 
      _menuManager = menuManager; 
     } 

     public void OnApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
     { 
      ContentService.Saving += UpdateMenu; 
     } 

     private void UpdateMenu(IContentService sender, SaveEventArgs<IContent> saveEventArgs) 
     { 
      _menuManager.UpdateMenu(); 
     } 
    } 

// Unity config: 
public static class UnityConfig 
{ 
    public static void RegisterComponents() 
    { 
     var container = new UnityContainer(); 

     container.RegisterType<IMenuManager, MenuManager>(); 

     GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); 
    } 

} 

// Owin Startup: 
public class UmbracoStandardOwinStartup : UmbracoDefaultOwinStartup 
{ 
    public override void Configuration(IAppBuilder app) 
    { 
     //ensure the default options are configured 
     base.Configuration(app); 

     UnityConfig.RegisterComponents(); 
    } 
} 

答えて

2

お読みください:https://our.umbraco.org/documentation/reference/using-ioc

OnApplicationStartedイベントにコンテナを登録してビルドする必要があります。これはUmbracoで動作させるためのものではありません。

+0

ありがとう、Marcin。この記事のアプローチは、通常のコントローラではうまくいきます。しかし、パラメータ化されたコンストラクタのサポートが不足しているため、ApplicationEvenHandlerでは機能しません(トピックの説明で述べたように)。何か案は? –

+0

MenuManagerをまっすぐにApplicationStartupクラスに挿入したいのはなぜですか?私は、このメソッドを処理するためのサービスを作成し、内部にそれ自身のコンストラクタを挿入するようにします。 –

+0

ApplicationStartupはMenuManagerによって異なります。たとえば、ドキュメントがCMSに公開されるたびに、MenuManager.UpdateMenu()をトリガーしたいと思います。 –