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();
}
}
ありがとう、Marcin。この記事のアプローチは、通常のコントローラではうまくいきます。しかし、パラメータ化されたコンストラクタのサポートが不足しているため、ApplicationEvenHandlerでは機能しません(トピックの説明で述べたように)。何か案は? –
MenuManagerをまっすぐにApplicationStartupクラスに挿入したいのはなぜですか?私は、このメソッドを処理するためのサービスを作成し、内部にそれ自身のコンストラクタを挿入するようにします。 –
ApplicationStartupはMenuManagerによって異なります。たとえば、ドキュメントがCMSに公開されるたびに、MenuManager.UpdateMenu()をトリガーしたいと思います。 –