Dependency injection 在Umbraco 4.7中扩展global.asax以进行依赖项注入

Dependency injection 在Umbraco 4.7中扩展global.asax以进行依赖项注入,dependency-injection,umbraco,Dependency Injection,Umbraco,我正在使用umbraco v 4.7.1(程序集版本:1.0.4281.20201),并且有一个必须扩展global.asax文件的项目 请不要这样做 我试过这个,在4.7中没有用 它是Global.asax,我需要扩展它,因为我正在使用依赖注入 我无法删除App_global.asax.dll文件(有些人可能会建议),因为每次我重新启动或重建项目时,它都会重新生成 这是我的实现, using Project.Umbraco.DependencyInjection; using Projec

我正在使用umbraco v 4.7.1(程序集版本:1.0.4281.20201),并且有一个必须扩展global.asax文件的项目

请不要这样做

  • 我试过这个,在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) {}
    }
}
这个实现似乎应该可以工作,也许我只是把它放在了错误的名称空间或者别的什么地方

谢谢你的帮助


从UMPLOR4.4.0开始,以后不再需要APPGLULAR.AXAX.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路由。

谢谢,我将在最近的功能中将此项目移至4.9,我已经对PreApplicationStart进行了一些分析,并使其正常工作。但是,它不允许我将我的IUnityContainer注入到上下文中!我从未与Unity合作过,因此我无法对其发表评论,但请确保谷歌[PreApplicationStartMethod iUnityContainer][1][1]: