静态初始化设计思路

时间:2012-01-31 17:03:31

标签: c# asp.net asp.net-mvc-3 static custom-attributes

目前,我的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?

2 个答案:

答案 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...
    }
}