我来自完整的 .net 框架,我开始使用 .Net Core。到目前为止,在我见过的每个项目中,我总是看到一个名为 ServiceCollectionExtensions 的类。但是,当我从头开始创建一个新项目时,该文件不存在。所以我想知道这个类是 .Net Core 结构的一部分还是只是一个约定,它的用途是什么。
它不是 ASP.NET Core 的标准部分,尽管 ASP.NET Core 在ServiceCollection
内部为各种事情使用了许多此类扩展类。这个名字也并不神奇。命名扩展类只是惯例[Whatever is being extended]Extensions
。在这种情况下,ServiceCollection
正在扩展,因此类通常命名为ServiceCollectionExtensions
。不过,您可以调用它FooBarBaz
来处理所有重要的事情。
就扩展而言ServiceCollection
,一般来说,它只是一种将一组通用功能封装在一个简单方法中的方法,就像任何类的任何扩展一样。例如,您可能有如下字符串扩展名:
public static class StringExtensions
{
public static int ToInt32(this string s) =>
int.TryParse(s, out var i) ? i : 0;
}
然后,不必总是写这个三元,你可以这样做:
myStr.ToIn32();
的扩展名也是如此ServiceCollection
。例如,该AddDefaultIdentity<TUser>
方法实际上是一个扩展,它执行以下操作:
services.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });
services.AddIdentityCore<TUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
configureOptions?.Invoke(o);
})
.AddDefaultUI()
.AddDefaultTokenProviders();
您可以直接在 中完成所有操作Startup.ConfigureServices
,但仅调用services.AddDefaultIdentity<ApplicationUser>()
显然要简单得多。
简而言之,如果有大量相关服务注册,您可以创建自己的扩展方法来封装所有这些,然后只需调用您的扩展方法,使您的Startup
类更易于阅读和理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句