IApplicationBuilder 里有如下一成员:
IServiceProvider ApplicationServices { get; set; }
HttpContext 里有如下两个成员:
public abstract IServiceProvider ApplicationServices { get; set; } public abstract IServiceProvider RequestServices { get; set; }
IServiceProvider 的成员:
public object GetService(Type serviceType)
创建 添加 调用的简单代码如下:
var serviceProvider = new ServiceCollection() .AddTransient<IFakeService, FakeService>() .AddTransient<CreationCountFakeService>() .BuildServiceProvider(); var IFakeService = serviceProvider.GetService(typeof(IFakeService))() as IFakeService;
简单描述为:创建一个集合 ServiceCollection;向集合里添加 键值对:接口 和 接口的实现。
集合会生成 ServiceProvider. 通过 ServiceProvider 来得到需要的对象。
代码中的 .AddTransient 作何理解吗? 现在看一下 LifecycleKind
public enum LifecycleKind { Singleton, //单例;单态; 只有一个示例 每次调用都返回同一个对象 Scoped, // 一定范围的 在一定范围内只有一个实例 如在一个请求范围内是同一个实例 不同的请求创建新对象 Transient //短暂的;转瞬即逝的;临时的 每次调用都创建一个新的对象 }