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();
}
}
谢谢,马辛。文章中的方法与常规控制器一起工作正常。但由于缺少支持参数化构造函数,因此它不适用于ApplicationEvenHandler(正如我在主题描述中所述)。有任何想法吗? –
为什么你想直接注入你的MenuManager到ApplicationStartup类?我会创建一个服务来处理这个方法,它会将它注入到它自己的构造函数中。 –
因为ApplicationStartup依赖于MenuManager。例如,我想每次在CMS中发布文档时都要触发MenuManager.UpdateMenu()。 –