《ASP.NET Core 3框架揭秘》勘误[逐步完善中…]
2020-04-10 16:01
731 查看
第1版第1/2次印刷
[上册]
- P6 最后1段
- 原文:KestrelServer是采用libuv创建的跨平台Web服务器。
- 改为:KestrelServer是一款跨平台Web服务器。
- 原文:注册的KestrelServer会绑定到“http//localhost:5000”和“https//localhost:5001”这两个地址监听请求
- 改为:注册的KestrelServer会绑定到“http://localhost:5000”和“https://localhost:5001”这两个地址监听请求
- 原文:这两个终结点通过预先设置的规则将具有某些特征的请求(如路径、HTTP方法等)映射到对应的终结点
- 改为:这两个中间件通过预先设置的规则将具有某些特征的请求(如路径、HTTP方法等)映射到对应的终结点
- 原文:curl.exe or the Invoke-WebRequest
- 改为: curl或者Invoke-WebRequest
- 原文:
# 5.2. 设置(运行)工作目录,并将发布文件复制到out子目录下 WORKDIR /app COPY --from= build /app/out .
# 5.2. 设置(运行)工作目录,并将发布文件复制到out子目录下 WORKDIR /app COPY --from=build /app/out .
- 原文:除在运行的时候介绍内存占用外
- 改为:除在运行的时候减少内存占用外
- 原文:可以发现它具有如下两个程序集的应用
- 改为:可以发现它具有如下针对两个程序集的引用
- 原文:之前解决程序集服务的方案就是PCL
- 改为:之前解决程序集复用的方案就是PCL
- 原文:对于全新的 .NET 平台来说
- 改为:对于全新的 .NET Core平台来说
- 原文:这个方法可以是一个单纯的虚方法
- 改为:这个方法可以是一个单纯的抽象方法
- 原文:public class FoobarEngineFactory : EngineFactory
- 改为:public class FoobarEngineFactory : MvcEngineFactory
- 原文:.Register<ControllerActivator, SingletonControllerActivator>();
- 改为:.Register<IControllerActivator, SingletonControllerActivator>();
- 原文: public Foo(IBar bar, IBaz):this(bar) =>Baz = baz;
- 改为:public Foo(IBar bar, IBaz baz):this(bar) =>Baz = baz;
- P73 第3段
- 原文:所以采用依赖注入模式的应用可以看作将服务推送到依赖注入容器
- 改为:所以采用依赖注入模式的应用可以看作将服务推送给被依赖对象
- 原文
public class Foobar<T1, T2>: IFoobar<T1,T2> { public IFoo Foo { get; } public IBar Bar { get; } public Foobar(IFoo foo, IBar bar) { Foo = foo; Bar = bar; } }
public class Foobar<T1, T2>: IFoobar<T1,T2> { public T1 Foo { get; } public T2 Bar { get; } public Foobar(T1 foo, T2 bar) { Foo = foo; Bar = bar; } }
- P91 第1个代码片段
- 原文
public class Foobar<T1, T2>: IFoobar<T1,T2> { public IFoo Foo { get; } public IBar Bar { get; } public Foobar(IFoo foo, IBar bar) { Foo = foo; Bar = bar; } }
public class Foobar<T1, T2>: IFoobar<T1,T2> { public T1 Foo { get; } public T2 Bar { get; } public Foobar(T1 foo, T2 bar) { Foo = foo; Bar = bar; } }
- P118 第1个代码片段
- 原文: Debug.Assert(ReferenceEquals(rootScope, singletonService.ApplicationServices));
- 改为:Debug.Assert(ReferenceEquals(serviceProvider , singletonService.ApplicationServices));
- 原文:
foreach (var fileInfo in _fileProvider.GetDirectoryContents(subPath)) { render(indent, fileInfo.Name); if (fileInfo.IsDirectory) { Render($@"{subPath}\{fileInfo.Name}".TrimStart('\\')); } }
foreach (var fileInfo in _fileProvider.GetDirectoryContents(subPath)) { render(indent, fileInfo.Name); if (fileInfo.IsDirectory) { Render($@"{subPath}\{fileInfo.Name}".TrimStart('\\')); } } indent--;
- 原文:FileConfigurationSource对象的Optional属性表示当前配置源是否可以默认。如果该属性被设置成False,即使指定的配置文件不存在也不会抛出异常。可默认的配置文件在支持多环境的场景中具有广泛应用。正如前面的演示实例,我们可以按照如下方式加载两个配置文件:基础配置文件appsettings.json一般包含相对全面的配置,针对某个环境的差异化配置则定义在appsettings.{environment}.json文件中。前者是必需的,后者则是可以默认的,这保证了应用程序在缺少基于当前环境的差异化配置文件的情况下依然可以使用定义在基础配置文件中的默认配置。
- 改为:FileConfigurationSource对象的Optional属性表示当前配置源是否可以缺省。如果该属性被设置成True,即使指定的配置文件不存在也不会抛出异常。可缺省的配置文件在支持多环境的场景中具有广泛应用。正如前面的演示实例,我们可以按照如下方式加载两个配置文件:基础配置文件appsettings.json一般包含相对全面的配置,针对某个环境的差异化配置则定义在appsettings.{environment}.json文件中。前者是必需的,后者则是可以缺省的,这保证了应用程序在缺少基于当前环境的差异化配置文件的情况下依然可以使用定义在基础配置文件中的默认配置。
- 原文:Lood方法还会利用这个DbContext对象将提供的初始化配置添加到数据库中。
- 改为:Load方法还会利用这个DbContext对象将提供的初始化配置添加到数据库中。
- 原文:我们演示的实例已经涉及Options模型的3个重要的接口,它们分别是IOptions<TOptions>和IOptionsSnapshot<TOptions>
- 改为:我们演示的实例已经涉及Options模型的3个重要的接口,它们分别是IOptions<TOptions>、IOptionsSnapshot<TOptions>和IOptionsMonitor<TOptions>
- 原文:第二个反省参数代表依赖的服务类型
- 改为:第二个泛型参数代表依赖的服务类型
- 原文:TraceListener具有两个名为TraceData的方法
- 改为:TraceSource具有两个名为TraceData的方法
- 原文:宿主元素为通过Foobar对象转换而成的EventPayload对象
- 改为:数组元素为通过Foobar对象转换而成的EventPayload对象
- 原文:
public virtual IDisposable Subscribe(IObserver<KeyValuePair<string, object>> observer); public virtual IDisposable Subscribe(IObserver<KeyValuePair<string, object>> observer, public virtual IDisposable Subscribe(IObserver<KeyValuePair<string, object>> observer, Predicate<string> isEnabled); Func<string, object, object, bool> isEnabled);
public virtual IDisposable Subscribe(IObserver<KeyValuePair<string, object>> observer); public virtual IDisposable Subscribe(IObserver<KeyValuePair<string, object>> observer, Predicate<string> isEnabled); public virtual IDisposable Subscribe(IObserver<KeyValuePair<string, object>> observer, Func<string, object, object, bool> isEnabled);
- 原文:"Host": "192.168.0.2" (appsettings.production.json)
- 改为:"Host": "192.168.0.3"
- 原文:我们从作为参数的ServiceCollection对象中获取当前注册的所有服务
- 改为:我们从作为参数的IServiceCollection对象中获取当前注册的所有服务
- 原文:对于一个非根容器的IServiceProvider对象来说,其生命周期决定于对应的ServiceScope对象,调用ServiceScope的Dispose方法会导致对封装IServiceProvider对象的回收释放。
- 改为:对于一个非根容器的IServiceProvider对象来说,其生命周期决定于对应的IServiceScope对象,调用IServiceScope的Dispose方法会导致对封装IServiceProvider对象的回收释放。
- P451 第1个代码片段
- 原文:
public static IWebHostBuilder Configure(this IWebHostBuilder hostBuilder, Action<IApplicationBuilder> configure) { var applicationName = configureApp.GetMethodInfo().DeclaringType.GetTypeInfo().Assembly.GetName().Name; ... }
public static IWebHostBuilder Configure(this IWebHostBuilder hostBuilder, Action<IApplicationBuilder> configure) { var applicationName = configure.GetMethodInfo().DeclaringType.GetTypeInfo().Assembly.GetName().Name; ... }
- P457 第2段
- 原文:进而得到承载环境信息的IWebHostEnvironment服务,最终根据提供的环境信息进行有针对性的服务注册
- 改为:进而得到承载环境信息的IWebHostEnvironment服务,最终根据提供的环境信息进行有针对性的中间件注册
- 原文:本章将介绍真实的管道,而且会按照类似的设计重建一个Mini版的ASP.NET Core框架。
- 改为:本章不会介绍真实的管道,而是按照类似的设计重建一个Mini版的ASP.NET Core框架。
- P468 第1个代码片段
- 原文:
public class HttpContext { public abstract HttpRequest Request { get; } public abstract HttpResponse Response { get; } } public class HttpRequest { public abstract Uri Url { get; } public abstract NameValueCollection Headers { get; } public abstract Stream Body { get; } } public class HttpResponse { public abstract int StatusCode { get; set; } public abstract NameValueCollection Headers { get; } public abstract Stream Body { get; } }
public class HttpContext { public HttpRequest Request { get; } public HttpResponse Response { get; } } public class HttpRequest { public Uri Url { get; } public NameValueCollection Headers { get; } public Stream Body { get; } } public class HttpResponse { public int StatusCode { get; set; } public NameValueCollection Headers { get; } public Stream Body { get; } }
- 原文:可以看出,IHttpRequestFeature接口和IHttpResponseFeature接口具有与抽象类型HttpRequest和HttpResponse完全一致的成员定义。
- 改为:可以看出,IHttpRequestFeature接口和IHttpResponseFeature接口具有与类型HttpRequest和HttpResponse完全一致的成员定义。
- 原文:也可以获取代表请求的HTTP消息的首部和主题
- 改为:也可以获取代表请求的HTTP消息的首部和主体
- 原文:定义在该程序集中的Startup方法会被加载出来
- 改为:定义在该程序集中的Startup类型会被加载出来
相关文章推荐
- [ASP.NET Core 3框架揭秘] 配置[1]:读取配置数据[上篇]
- [ASP.NET Core 3框架揭秘] 文件系统[2]:总体设计
- [ASP.NET Core 3框架揭秘] 依赖注入[5]: 利用容器提供服务
- [ASP.NET Core 3框架揭秘] 配置[4]:将配置绑定为对象
- [ASP.NET Core 3框架揭秘] 文件系统[3]:物理文件系统
- ASP.NET Core 3框架揭秘之 异步线程无法使用IServiceProvider问题
- [ASP.NET Core 3框架揭秘] 配置[2]:读取配置数据[下篇]
- [ASP.NET Core 3框架揭秘] Options[2]: 配置选项的正确使用方式[下篇]
- [ASP.NET Core 3框架揭秘]服务承载系统[5]: 承载服务启动流程[上篇]
- [ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
- [ASP.NET Core 3框架揭秘] 配置[6]:多样化的配置源[上篇]
- [ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统”
- [ASP.NET Core 3框架揭秘] 配置[5]:配置数据与数据源的实时同步
- ASP.NET Core中的依赖注入(5):ServicePrvider实现揭秘【补充漏掉的细节】
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】
- ASP.NET Core框架揭秘(持续更新中…)
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】
- ASP.NET Core Token认证
- yoeman构建Asp.net core项目并且实现分层
- ASP.NET Core的配置(2):配置模型详解