繁体   English   中英

如何在ASP.NET页的每个控制器中使用非静态类的相同实例?

[英]How can I use the same instance of a non-static class in every controller in an ASP.NET page?

我是ASP.Net框架的新手,目前正在努力了解如何管理对象的生存期。

在更具体的情况下,我目前在应用程序中遇到问题:

我想有一个从我的应用程序开始的类,该类应在后台运行并做一些工作,这些工作将在以后的应用程序控制器中处理一些数据。

因此,我将尝试在Global.asax.cs创建此类的对象,以便它可以在我的应用程序也运行时立即启动并运行。

但是,如何将这个实例传递给控制器​​,该控制器随后可能会被调用?

当前,我唯一的想法是使我的数据收集类成为static类,对此我并不满意,因为我想尽可能避免使用静态类。

有什么解决办法吗?

您可以创建一个具有静态成员的类,或者创建一个单例以将数据和逻辑保存在一个地方。 可以通过在Application_Start调用Global.asax.cs中的方法之一来启动类内部的处理。

由于一个以上的线程可以同时访问静态数据收集,因此数据收集可能需要多线程访问处理。

我脑海中的选择:

如果使用的是诸如Autofac之类的依赖项注入框架,则可以实例化类的新实例,并使用DI框架将其注册为单个实例(单例)。

// In your DI config -- Autofac used here as an example
Foo myFoo = new Foo();
myFoo.Start();
builder.RegisterInstance<Foo>(myFoo).AsSelf().SingleInstance();

然后,只需将其作为参数添加到控制器的构造函数即可。

public class HomeController : Controller
{
    private readonly Foo _myFoo;

    public HomeController(Foo myFoo)
    {
        _myFoo = myFoo;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM