2016-12-06 76 views
0

在我们的旧ASP.NET应用程序中,我们有“上下文”的概念,即“网络”可能是网页可能需要的任何数据。因此,上下文可能包含有关网站本身的数据,它可能包含最终用途,,的详细信息。如何为ASP.NET核心应用程序设置上下文

完整的上下文在请求的生命周期开始时由HttpModule加载。上下文的每个部分都保存在缓存中或当前项目集合中(取决于我们想要保存信息的时间长短)。当页面需要时,页面将会调用Context。

所以,我想知道如何最好地实现类似的.NET核心。

如果我们把最终用户的数据的简单的例子....

我想到的是,这个数据可以在所谓的“最终用户”的对象举行。该控制器的构造函数可以有型IEndUser的参数,我们可以使用内置的依赖注入到Startup.cs添加此实例:

services.AddScoped<IEndUser, EndUser>(); 

这当然增加了香草终端用户的对象,但我希望我可以使用MiddleWare类来首先设置它的所有属性.....因为我使用的是“AddScoped”,那么我的希望是Controller的构造函数将接收MiddleWare刚刚填充的同一个实例。不过,我很快意识到这些是不同的对象(显然是事后),这是错误的方法。

那么:什么是正确的方法?请记住以下几点:

  • 在旧的HttpModule,人们可以加载网站对象(在概念上与终端用户对象相似)(从数据库加载数据)和HTTP模块检查中,如果site.OnMaintenance财产是正确的,在这种情况下,执行重定向到适当的页面,而不管当前的请求,并且在执行进入请求的控制器之前。

所以总结一下,我想:

  1. 我中间件创建一个类,填充它的特性(从数据库)
  2. 我中间件在该类的性能进行测试,可能会执行重定向。
  3. 如果没有重定向,那么将该实例注入到我的Controller的构造函数中。

回答

1

正如您已经注意到的,ASP.NET Core的体系结构是不同的。有一个上下文对象(接近“上帝对象”)的状态在ASP.NET中很常见,但在ASP.NET Core中不是正确的方法。

不知道很多关于你的应用程序是如何构成的,我建议如下:

  1. 创建加入到DI容器MaintenanceNoticeService。该服务将封装检查数据库所需的所有逻辑,以查找OnMaintenance标志。

  2. 在使用服务检查站点状态的管道中创建一个位于MVC上方的简单中间件。如果有必要,你可以在这里重定向。

  3. 创建单独访问用户数据的服务。这些可以根据需要注入到控制器中。

目标应该是把事情分解成小的逻辑部分。有一个处理检查站点维护并且注入控制器以提供用户数据的Context对象也是混合问题。

相关问题