[英]What is the object scope and lifetime in the different ASP.NET MVC components?
ASP.NET MVC有许多组件。 控制器,动作,静态类,ApiControllers,过滤器,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;
}
}
我发现难以解析不同对象和静态类属性的生命周期和范围。 这让我陷入线程和其他问题。
除了分析和经验,是否有一个通常的过程来确定这个? 另一个更可回答的问题是:“以下各项的生命周期和范围是什么?为什么?
所有静态属性都具有AppDomain生命周期(从第一次使用到关闭/重新启动)。
其他(控制器,模型和视图) - 请求生命周期(在请求期间创建,在该请求结束后符合GC条件)。
我可以建议使用Dependency Injection容器。 终身范围的问题将消失,因为容器将为您管理所有这些问题。
而不是静态启动和搞乱函数工厂,你会做:
private readonly IService service;
private readonly IOtherService otherService;
public MyController(IService service, IOtherService)
{
this.service = service;
this.otherService = otherService;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.