首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态初始化设计思想

静态初始化设计思想
EN

Stack Overflow用户
提问于 2012-02-01 01:03:31
回答 2查看 618关注 0票数 0

目前,我的MVC3应用程序依赖于在Application_Start()中初始化的静态类,如下所示:

代码语言:javascript
复制
protected void Application_Start()
{
    MyDependency.Initialize();
}

静态类看起来或多或少如下:

代码语言:javascript
复制
public static class MyDependency
{
    public static void Initialize()
    {
        // Perform some I/O...
    }
}

此依赖项在属性类中使用,该属性类附带一个警告,即没有运行时依赖项(因此需要在Application_Start()中调用initialize )

代码语言:javascript
复制
public class MyAttributeClass : ...
{
    public MyAttributeClass()
    {
        MyDependency.DoSomething(); //...
    }
}

最终,我们商店中的其他开发人员将不得不使用这个API,我想看看是否有方法可以去掉Application_Start()中的行( Global.asax中的额外一行代码可能会被遗忘)。

例如,有没有一种方法可以在不需要编辑Global.asax的情况下将MyDependency类“挂钩”到管道中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-01 01:27:10

MyDependency中使用静态构造函数。Here's解释静态构造函数提供的功能的MSDN。

通过使用静态构造函数,您应该能够执行所需的所有IO,因为构造函数将在访问任何静态成员之前运行。

票数 3
EN

Stack Overflow用户

发布于 2012-02-01 01:30:27

你应该看看WebActivator。来自the wiki

WebActivator是一个NuGet包,它允许其他包轻松地将启动和关闭代码引入web应用程序。与使用许多包中的启动逻辑修改global.asax相比,这提供了一个更干净的解决方案。

从本质上讲,您将需要类似以下内容:

代码语言:javascript
复制
using System;

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyDependency), "Initialize")]
public static class MyDependency
{
    public static void Initialize()
    {
        // Perform some I/O...
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9083697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档