如何将对象注入Global.asax?

时间:2016-10-19 02:30:10

标签: c# asp.net-mvc dependency-injection autofac

我有Owin的ASP.NET MVC 5应用程序。

这是我的界面:

using System.Collections.Generic;

namespace MvcApp.Logging
{
    public interface ILog
    {
        void Debug(string format, params object[] args);
        void Error(string format, params object[] args);
        void Fatal(string format, params object[] args);
        void Info(string format, params object[] args);
        void Trace(string format, params object[] args);
        void Warn(string format, params object[] args);

        // custom
        void Write(LogType type, object properties, string message, params object[] args);

        bool IsDebugEnabled { get; }
        bool IsErrorEnabled { get; }
        bool IsFatalEnabled { get; }
        bool IsInfoEnabled { get; }
        bool IsTraceEnabled { get; }
        bool IsWarnEnabled { get; }
    }
}

我正在使用nuget包Autofac.Mvc5.Owin将ILog注入控制器的构造函数中。这种方法很有效。

Owin Startup Class:

builder.RegisterType<Log>().As<ILog>().InstancePerRequest();

现在我需要将ILog接口注入Global.asax.cs类和Application_Start方法。

这可能吗?注入ILog需要设置什么?

public class MvcApplication : HttpApplication
{
   // How to inject ILog here?

    protected void Application_Start()
    {
       // I need write for example this message
       ILog.Info("Application starting");
    }
}

非常感谢

1 个答案:

答案 0 :(得分:0)

Global.asax中的Application_Start方法在Owin Startup.Configuration之前运行。 因此,即使您找到了将ILog接口注入Application_Start方法的方法,该接口也不会在那时解析。

在依赖关系解析后,不要在Application_Start方法中使用ILog,而是在Owin Startup.Configuration方法中使用它。

Here's关于Global.asax与Owin Startup的一个很好的问题,这是一个很好的阅读