2017-02-27 42 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

谢谢,马辛。文章中的方法与常规控制器一起工作正常。但由于缺少支持参数化构造函数,因此它不适用于ApplicationEvenHandler(正如我在主题描述中所述)。有任何想法吗? –

+0

为什么你想直接注入你的MenuManager到ApplicationStartup类?我会创建一个服务来处理这个方法,它会将它注入到它自己的构造函数中。 –

+0

因为ApplicationStartup依赖于MenuManager。例如,我想每次在CMS中发布文档时都要触发MenuManager.UpdateMenu()。 –