不同 ASP.NET MVC 组件中的对象范围和生命周期是多少?

Sha*_*tin 4 c# asp.net asp.net-mvc scope lifetime

ASP.NET MVC 有许多组件。控制器、操作、静态类、ApiController、过滤器、RouteTables、BundleTables、工厂等以及控制器范围的访问修饰符。

如果我们实例化一个对象或访问其中任何一个的静态属性,我们如何确定对象、类或成员的范围和生命周期。以这个例子为例:

public static class MyHelper
{
    public static object MyProperty { get; set; }
    public static Func<object> MyPropertyFactory { get; set; }

    static MyHelper()
    {
        MyProperty = new object();
        MyPropertyFactory = () => new object();
    }
}
public class MyController : ApiController
{
    public object MyAppProperty { get; set; }
    public object MyRequestProperty { get; set; }

    public MyController()
    {
        MyAppProperty = MyHelper.MyProperty;
        MyRequestProperty = MyHelper.MyPropertyFactory;
    }

    public object MyAction()
    {
        var MyActionObject = new object();
        return MyActionObject;
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现不同对象和静态类属性的生命周期和范围很难解析。这让我陷入了线程和其他问题。

除了分析和经验之外,是否有一个通用的过程来确定这一点?另一个更容易回答的问题是:“以下各项的生命周期和范围是什么?为什么?

  • 我的帮手
  • 我的助手.我的财产
  • MyHelper.MyPropertyFactory
  • 我的控制器
  • MyController.MyAppProperty
  • MyController.MyRequestProperty
  • MyController.MyAction.MyActionObject

Ale*_*kov 6

所有静态属性都有 AppDomain 生命周期(从首次使用到关闭/重新启动)。

其他(控制器、模型和视图)- 请求生命周期(在请求期间创建,在该请求结束后有资格进行 GC)。