目前,我的MVC3应用程序依赖于在Application_Start()中初始化的静态类,如下所示:
protected void Application_Start()
{
MyDependency.Initialize();
}静态类看起来或多或少如下:
public static class MyDependency
{
public static void Initialize()
{
// Perform some I/O...
}
}此依赖项在属性类中使用,该属性类附带一个警告,即没有运行时依赖项(因此需要在Application_Start()中调用initialize )
public class MyAttributeClass : ...
{
public MyAttributeClass()
{
MyDependency.DoSomething(); //...
}
}最终,我们商店中的其他开发人员将不得不使用这个API,我想看看是否有方法可以去掉Application_Start()中的行( Global.asax中的额外一行代码可能会被遗忘)。
例如,有没有一种方法可以在不需要编辑Global.asax的情况下将MyDependency类“挂钩”到管道中?
发布于 2012-02-01 01:27:10
在MyDependency中使用静态构造函数。Here's解释静态构造函数提供的功能的MSDN。
通过使用静态构造函数,您应该能够执行所需的所有IO,因为构造函数将在访问任何静态成员之前运行。
发布于 2012-02-01 01:30:27
你应该看看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...
}
}https://stackoverflow.com/questions/9083697
复制相似问题