在我们的旧ASP.NET应用程序中,我们有“Context”的概念,它是网页可能需要的任何数据。因此,Context可以包含有关网站本身的数据,它可以包含最终用途的详细信息,等,等。
在请求生命周期开始期间,HttpModule加载了完整的Context。 Context的每个部分都保存在Cache或Current Items Collection中(取决于我们想要保存信息的时间长度)。当需要时,Page会调用Context。
所以,我想知道如何最好地在.NET Core中实现类似的功能。
如果我们采用最终用户数据的简单例子......
我的想法是这个数据可以保存在一个名为“EndUser”的对象中。 Controller的构造函数可以有IEndUser类型的参数,我们可以使用内置的依赖注入在Startup.cs中添加一个这样的实例:
services.AddScoped<IEndUser, EndUser>();
这当然会添加一个vanilla EndUser对象,但是我希望我可以使用MiddleWare类来首先设置它的所有属性.....因为我正在使用“AddScoped”然后我希望Controller的构造函数会接收MiddleWare刚刚填充的相同实例。但是,我很快就意识到这些是不同的对象(事后很明显)并且这是错误的方法。
那么:什么是正确的方法?请记住以下内容:
总而言之,我想:
答案 0 :(得分:1)
ASP.NET Core的架构不同,正如您所注意到的那样。有一个上下文对象(接近&#34;上帝对象&#34;)状态在ASP.NET中很常见,但在ASP.NET Core中不是正确的方法。
我不太了解您的应用程序的结构,我建议如下:
创建添加到DI容器的MaintenanceNoticeService
。此服务将封装检查数据库OnMaintenance
标志所需的所有逻辑。
在管道中创建一个位于MVC上方的简单中间件,该管道使用该服务来检查您网站的状态。如有必要,您可以在此重定向。
为访问用户数据等内容创建单独的服务。这些可以根据需要注入控制器。
目标应该是将事情分解为小的逻辑部分。具有处理站点维护检查的Context对象以及注入控制器以提供用户数据的Context对象是混合问题。