MVC:在Application启动时运行方法而不从Application_Start调用它

我有一个类应该在应用程序启动时运行。 我不想直接从Application_Start事件调用此方法。 将这个类实例化并在application_start上运行方法的最佳方法是什么?

换句话说,我想将此代码注入应用程序启动。

我注意到有些人使用WebActivatorEx.PostApplicationStartMethod。 我没有仔细研究细节,但这是我看的第一个地方。 这是一个注册为在调用RegisterBundles时自动运行的类的示例。 其他一个钩子可能是你正在寻找的。

[assembly: WebActivatorEx.PostApplicationStartMethod(typeof(BootstrapBundleConfig), "RegisterBundles")] namespace Deloitte.EmploymentMemo.Presentation.App_Start { public class BootstrapBundleConfig { public static void RegisterBundles() { // Add @Styles.Render("~/Content/bootstrap") in the  of your _Layout.cshtml view // For Bootstrap theme add @Styles.Render("~/Content/bootstrap-theme") in the  of your _Layout.cshtml view // Add @Scripts.Render("~/bundles/bootstrap") after jQuery in your _Layout.cshtml view // When , MVC4 will render the full readable version. When set to , the minified version will be rendered automatically BundleTable.Bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include("~/Scripts/bootstrap.js")); BundleTable.Bundles.Add(new StyleBundle("~/Content/bootstrap").Include("~/Content/bootstrap.css")); BundleTable.Bundles.Add(new StyleBundle("~/Content/bootstrap-theme").Include("~/Content/bootstrap-theme.css")); } } } 

使用OWIN启动的可能解决方案之一。

安装nuget包: install-package Microsoft.Owin.Host.SystemWeb

添加到appsettings启动类:

     

按照惯例,您将需要使用名为Configuration的方法的类:

  public class Startup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } 

或做任何你需要的事情。

如果您对它感兴趣,请检查它是否为asp.net:OWIN和Katana项目

使用代表。 它们包含对方法的引用,并且可以同时调用某些方法; 使用委托的一个例子:

 public delegate void myDelegate(); private static void Main() { myDelegate myFunctions = Method1; //initialize delegate with Method1 myFunctions += Method2; //Add Method2 to delegate myFunctions(); //call all methods added to delegate } public static void Method1() { Console.WriteLine("Hello from method1"); } public static void Method2( ) { Console.WriteLine("Hello from method2"); } 

这将调用Method1和Method2