目前,我的MVC 3应用程序依赖于在Application_Start()中初始化的静态类,如下所示:
protected void Application_Start()
{
MyDependency.Initialize();
}
静态类看起来或多或少如下:
public static class MyDependency
{
public static void Initialize()
{
// Perform some I/O...
}
}
这个依赖项在属性类中使用,它伴随着没有运行时依赖性的警告(因此在Application_Start()中初始化的调用)
public class MyAttributeClass : ...
{
public MyAttributeClass()
{
MyDependency.DoSomething(); //...
}
}
最终,我们商店中的其他开发人员将不得不使用此API,我想看看是否有办法摆脱Application_Start()中的一行(Global.asax中的一行额外代码)可能是一个被遗忘的步骤)
例如,有没有一种方法MyDependency类可以“挂钩”到管道而无需编辑Global.asax?
答案 0 :(得分:3)
在MyDependency
中使用静态构造函数。 Here's MSDN解释静态构造函数提供的功能。
通过使用静态构造函数,您应该能够执行所需的所有IO,因为构造函数将在访问任何静态成员之前运行。
答案 1 :(得分:0)
你应该看看WebActivator。来自the wiki:
WebActivator是一个NuGet包,可以轻松地使用其他包 将启动和关闭代码引入Web应用程序。这给了 一个更清洁的解决方案,而不是用。修改global.asax 来自许多软件包的启动逻辑。
基本上,你需要这样的东西:
using System;
[assembly: WebActivator.PreApplicationStartMethod(typeof(MyDependency), "Initialize")]
public static class MyDependency
{
public static void Initialize()
{
// Perform some I/O...
}
}