Im使用umbraco v 4.7.1(汇编版本:1.0.4281.20201),并且有一个项目,我必须在其中扩展global.asax文件。
请不要使用以下
- 我试过了,http://blog.mattbrailsford.com/2010/07/11/registering-an-application-start-event-handler-in-umbraco/,在4.7中不起作用
- 这是我需要扩展的Global.asax,因为我正在处理依赖项注入
- 我无法删除App_global.asax.dll文件(正如一些人可能建议的那样),因为每次我重新启动或重建项目时,它都会重新生成
这是我的实现,
using Project.Umbraco.DependencyInjection;
using Project.Umbraco.IoC;
using Microsoft.Practices.Unity;
using System;
using System.Diagnostics;
using umbraco;
namespace Project.Umbraco.App_Start
{
public class MyGlobal : Global, IContainerAccessor
{
///
/// Returns the IoC container
/// IContainerAccessor
///
public IUnityContainer Container
{
get
{
return MvcUnityContainer.Instance.Container;
}
}
protected override void Application_Start(object sender, EventArgs e)
{
base.Application_Start(sender, e);
Debug.WriteLine("Application start");
}
protected override void Application_BeginRequest(object sender, EventArgs e)
{
base.Application_BeginRequest(sender, e);
Debug.WriteLine("Application start");
}
//protected void Session_Start(object sender, EventArgs e) {}
//protected void Application_AuthenticateRequest(object sender, EventArgs e) {}
//protected void Application_Error(object sender, EventArgs e) {}
//protected void Session_End(object sender, EventArgs e) {}
//protected void Application_End(object sender, EventArgs e) {}
}
}
实现似乎应该工作,也许我只是把它放在了错误的命名空间或其他什么地方?
感谢的帮助
T
从Umbraco 4.8.0及以后,不再需要App_global.asax.dll,因此您可能需要考虑升级到新版本。
不过,在4.7中,您可以简单地使用PreApplicationStart方法,创建一个看起来有点像这样的类:
using System.Linq;
using System.Web.Routing;
using System.Web.Http;
using CustomerName.Extensions;
[assembly: System.Web.PreApplicationStartMethod(typeof(AppStart), "PreStart")]
namespace CustomerName.Extensions
{
public static class AppStart
{
public static void PreStart()
{
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
当然,您可以插入DI代码,而不是定义WebAPI路由。