日志、依赖注入、Session和缓存

已按固定格式整理完成,以下为 WordPress 可复制排版内容:

18-日志 logging的使用和Nlog的使用

asp.net core内置支持日志,当然开发人员也可以轻松切换为其他的日志框架。使用 dotnet run 命令 运行 查看日志控制台记录器。

日志级别:Warning、Info、Error、Debug、Trace。

安装nlog(这个不是内置的日志):

PM> install-package nlog.extensions.logging -preCode language: CSS (css)

正在还原 H:\Source\NLogDemo\NLogDemo\NLogDemo.csproj 的包…

使用内置的日志器 Microsoft.Extensions.Logging,就是使用微软的日志器。

关于 singlepage:就是不需要控制器 直接一个视图。

public class HomeController : Controller
{
    private ILogger<HomeController> _logger;
    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogDebug("LogDebug----");
        _logger.LogWarning("LogWarning----");
        _logger.LogError("LogError----");
        _logger.LogInformation("LogInformation----");
        _logger.LogTrace("LogTrace----");
        _logger.LogCritical("LogCritical----");
        return View();
    }
}Code language: HTML, XML (xml)

输出里面 就会输出下面的日志:

NLogDemo2> Now listening on: http://localhost:28734
NLogDemo2> Application started. Press Ctrl+C to shut down.
NLogDemo2> info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
NLogDemo2>       Request starting HTTP/1.1 GET http://localhost:19075/  
NLogDemo2> warn: Microsoft.AspNetCore.Server.Kestrel[22]
NLogDemo2>       Heartbeat took longer than "00:00:01" at "04/02/2018 15:37:54 +00:00".
NLogDemo2> info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
NLogDemo2>       Executing action method NLogDemo2.Controllers.HomeController.Index (NLogDemo2) with arguments ((null)) - ModelState is Valid
NLogDemo2> dbug: NLogDemo2.Controllers.HomeController[0]
NLogDemo2>       LogDebug----
NLogDemo2> warn: Microsoft.AspNetCore.Server.Kestrel[22]
NLogDemo2>       Heartbeat took longer than "00:00:01" at "04/02/2018 15:37:59 +00:00".
NLogDemo2> warn: NLogDemo2.Controllers.HomeController[0]
NLogDemo2>       LogWarning----
NLogDemo2> fail: NLogDemo2.Controllers.HomeController[0]
NLogDemo2>       LogError----
NLogDemo2> info: NLogDemo2.Controllers.HomeController[0]
NLogDemo2>       LogInformation----
NLogDemo2> crit: NLogDemo2.Controllers.HomeController[0]
NLogDemo2>       LogCritical----Code language: JavaScript (javascript)

19-依赖注入DI以及它的好处

什么是依赖注入:一种实现对象及其合作者或者依赖项之间松散耦合的技术。以前我们在action中使用对象的时候 可能是通过new,现在我们不需要这样做了。我们可以交给其他某个地方帮我们new,我们只管使用这些对象。

依赖注入:以前我们调用其他类的时候

public IActionResult Index()
{
    var tool = new EmailTool();
    tool.Send("xxx");Code language: PHP (php)

本集代码:

namespace NLogDemo2.Cores
{
    public interface ITool
    {
        void Send(string message);
    }
}

namespace NLogDemo2.Cores
{
    public class EmailTool: ITool
    {
        public void Send(string message)
        {
            Console.Write("发邮件:" + message);
        }
    }
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITool, EmailTool>();
    services.AddMvc();
}Code language: HTML, XML (xml)
public class HomeController : Controller
{
    private ITool _tool;
    private ILogger<HomeController> _logger;
    public HomeController(ILogger<HomeController> logger,ITool tool)
    {
        _tool = tool;
        _logger = logger;
    }

    public IActionResult Index()
    {
        //以前需要new的
        //var tool = new EmailTool();
        //tool.Send("xxx");

        _tool.Send("sdfdsfdsf");Code language: HTML, XML (xml)

依赖注入的方式的好处:以后我们要增加或者修改其他的发消息方式,我们可以不用管这个的homecontroller。因为我们使用了接口,接口目的就是为了解耦。比如我们加一个PhoneTool,那么我们只加就行了 并且实现这个Itool,然后我们只需要改变Startup的configureservice:

services.AddSingleton<ITool, PhoneTool>();Code language: HTML, XML (xml)

20-ASP.NET CORE关于Session 和session的配置

先来理一理session。引入 using Microsoft.AspNetCore.Http;

现在使用session 不像以前了:

//以前需要new的
//var tool = new EmailTool();
//tool.Send("xxx");

//HttpContext.Session["key"] = "value";
HttpContext.Session.SetString("key", "dd");Code language: JavaScript (javascript)

结果发现 报错:HttpContext.Session = 'HttpContext.Session' threw an exception of type 'System.InvalidOperationException'

我们需要先开启session服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITool, PhoneTool>();
    services.AddSession();//加入session服务 这样 才能使用session
    services.AddMvc();
}Code language: JavaScript (javascript)
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSession();//这里也需要配置session 需要在mvc之前Code language: JavaScript (javascript)

21-程序缓存Caching- Memory

目前.NET core提供三种缓存存储方式:Memory、Redis、Sqlserver。

同样 我们需要先安装包。缓存 是给所有人用的。

  1. 新建web应用 不适用认证
  2. 添加引用
Install-package Microsoft.Extensions.Caching.MemoryCode language: CSS (css)
  1. 在startup里面去添加服务:Services.AddMemoryCache();
  2. 在控制器中使用 一样用到依赖注入
public class HomeController : Controller
{
    private ITool _tool;
    private ILogger<HomeController> _logger;
    private IMemoryCache _memoryCache;

    public HomeController(ILogger<HomeController> logger,ITool tool,IMemoryCache memoryCache)
    {
        _tool = tool;
        _logger = logger;
        _memoryCache = memoryCache;
    }Code language: HTML, XML (xml)

Action中使用缓存memorycache,缓存也是键值对:

//使用memorycache
//一般我们的缓存使用方式 都是想判断缓存有没有 有则读取 没有则从原来地方获取 然后写入缓存
var cacheKey = "cacheKey";
string res = string.Empty;
if (!_memoryCache.TryGetValue(cacheKey,out res))//缓存里面又 则传入一个out 去里面获取缓存的值
{
    res = DateTime.Now.ToString();//如果没有缓存则从其他地方获取 比如数据库 等等
    _memoryCache.Set(cacheKey, res);//再重新把缓存写入缓存里面
}Code language: PHP (php)

还可以设置缓存的过期时间,包括绝对过期时间 和相对过期时间(相对过期时间 就是滑动过期)。还有移除缓存,缓存还有这个失效的回调函数。

NuGet 安装输出:

PM> Install-package Microsoft.Extensions.Caching.Memory
  GET https://api.nuget.org/v3/registration3-gz-semver2/microsoft.extensions.caching.memory/index.json
  OK https://api.nuget.org/v3/registration3-gz-semver2/microsoft.extensions.caching.memory/index.json 547 毫秒
正在还原 E:\FoxDevelop.com视频\137-ASP.NET CORE 视频教程\CachingDemo\CachingDemo\CachingDemo.csproj 的包...
正在安装 NuGet 程序包 Microsoft.Extensions.Caching.Memory 2.0.1。
正在提交还原...
将锁定文件写入磁盘。路径: E:\FoxDevelop.com视频\137-ASP.NET CORE 视频教程\CachingDemo\CachingDemo\obj\project.assets.json
E:\FoxDevelop.com视频\137-ASP.NET CORE 视频教程\CachingDemo\CachingDemo\CachingDemo.csproj 的还原在 476.59 ms 内完成。
执行 nuget 操作花费时间 2.16 sec
已用时间: 00:00:05.2860151
PM>Code language: JavaScript (javascript)

VS2017可以进行建议变量名 这个很不错。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注