public bool GetService([FromServices] IMySingletonService singletonService, [FromServices] IMySingletonService singletonService1, [FromServices] IMyScopedService scopedService, [FromServices] IMyScopedService scopedService1, [FromServices] IMyTransientService transientService, [FromServices] IMyTransientService transientService1 ) { Console.WriteLine("请求开始GetService();"); Console.WriteLine($"{nameof(IMySingletonService)}.singletonService:{singletonService.GetHashCode()}"); Console.WriteLine($"{nameof(IMySingletonService)}.singletonService1:{singletonService1.GetHashCode()}"); Console.WriteLine($"{nameof(IMyScopedService)}.scopedService:{scopedService.GetHashCode()}"); Console.WriteLine($"{nameof(IMyScopedService)}.scopedService1:{scopedService1.GetHashCode()}"); Console.WriteLine($"{nameof(IMyTransientService)}.transientService:{transientService.GetHashCode()}"); Console.WriteLine($"{nameof(IMyTransientService)}.transientService1:{transientService1.GetHashCode()}"); Console.WriteLine("请求结束"); return(true); }
// IMyScopedService is injected into Invoke public async Task Invoke(HttpContext httpContext, IMyScopedService myScopedService) { myScopedService.MyProperty++; await httpContext.Response.WriteAsync($"myScopedService.MyProperty:{myScopedService.MyProperty}"); await _next(httpContext); }
/// <summary> /// 构造注入 /// </summary> /// <param name="myTransientService1"></param> /// <param name="myTransientService2"></param> /// <param name="myScopedService1"></param> /// <param name="myScopedService2"></param> /// <param name="mySingletonService1"></param> /// <param name="mySingletonService2"></param> public Test01Controller(IMyTransientService myTransientService1, IMyTransientService myTransientService2, IMyScopedService myScopedService1, IMyScopedService myScopedService2, IMySingletonService mySingletonService1, IMySingletonService mySingletonService2) { _myTransientService1 = myTransientService1; _myTransientService2 = myTransientService2; _myScopedService1 = myScopedService1; _myScopedService2 = myScopedService2; _mySingletonService1 = mySingletonService1; _mySingletonService2 = mySingletonService2; }
public Task Invoke(HttpContext httpContext, IMyScopedService svc) { svc.MyProperty = 1000; if (svc.IsMyProperty()) { return(_next(httpContext)); } else { return(httpContext.Response.WriteAsync($"{nameof(svc.MyProperty)}<1000")); } }
public void GetService2([FromServices] IMySingletonService singletonService, [FromServices] IMyScopedService scopedService, [FromServices] IMyTransientService transientService ) { Console.WriteLine("请求开始GetService2()"); Console.WriteLine($"{nameof(IMySingletonService)}.singletonService:{singletonService.GetHashCode()}"); Console.WriteLine($"{nameof(IMyScopedService)}.scopedService:{scopedService.GetHashCode()}"); Console.WriteLine($"{nameof(IMyTransientService)}.transientService:{transientService.GetHashCode()}"); //GetTransientService(); Console.WriteLine("请求结束"); }
public ActionResult GetServices([FromServices] IMySingletonService singletonService1, [FromServices] IMySingletonService singletonService2, [FromServices] IMyTransientService transientService1, [FromServices] IMyTransientService transientService2, [FromServices] IMyScopedService scopedService1, [FromServices] IMyScopedService scopedService2) { Console.WriteLine($"singleton1: {singletonService1.GetHashCode()}"); Console.WriteLine($"singleton2: {singletonService2.GetHashCode()}"); Console.WriteLine($"transient1: {transientService1.GetHashCode()}"); Console.WriteLine($"transient2: {transientService2.GetHashCode()}"); Console.WriteLine($"scoped1: {scopedService1.GetHashCode()}"); Console.WriteLine($"scoped2: {scopedService2.GetHashCode()}"); return(Content("OK")); }
public bool Get([FromServices] IMyTransientService myTransientService1, [FromServices] IMyTransientService myTransientService2, [FromServices] IMyScopedService myScopedService1, [FromServices] IMyScopedService myScopedService2, [FromServices] IMySingletonService mySingletonService1, [FromServices] IMySingletonService mySingletonService2) { Console.WriteLine($"【瞬时实例】myTransientService1:{myTransientService1.GetHashCode()}"); Console.WriteLine($"【瞬时实例】myTransientService2:{myTransientService2.GetHashCode()}"); Console.WriteLine($"【域内单例】myScopedService1:{myScopedService1.GetHashCode()}"); Console.WriteLine($"【域内单例】myScopedService2:{myScopedService2.GetHashCode()}"); Console.WriteLine($"【全局单例】mySingletonService1:{mySingletonService1.GetHashCode()}"); Console.WriteLine($"【全局单例】mySingletonService2:{mySingletonService2.GetHashCode()}"); Console.WriteLine($"========请求结束======="); return(true); }
public int Get([FromServices] IMySingletonService singleton1, [FromServices] IMySingletonService singleton2, [FromServices] IMyTransientService myTransient1, [FromServices] IMyTransientService myTransient2, [FromServices] IMyScopedService myScoped1, [FromServices] IMyScopedService myScoped2) { Console.WriteLine($"singleton1: {singleton1.GetHashCode()}"); Console.WriteLine($"singleton2: {singleton2.GetHashCode()}"); Console.WriteLine($"Transient: {myTransient1.GetHashCode()}"); Console.WriteLine($"Transient: {myTransient2.GetHashCode()}"); Console.WriteLine($"Scoped: {myScoped1.GetHashCode()}"); Console.WriteLine($"Scoped: {myScoped2.GetHashCode()}"); Console.WriteLine($"=====请求结束===="); return(1); }
public string GetService( [FromServices] IMySingletonService singleton1, [FromServices] IMySingletonService singleton2, [FromServices] IMyTransientService transient1, [FromServices] IMyTransientService transient2, [FromServices] IMyScopedService scoped1, [FromServices] IMyScopedService scoped2) { Console.WriteLine($"singleton1:{singleton1.GetHashCode()}"); Console.WriteLine($"singleton2:{singleton2.GetHashCode()}"); Console.WriteLine($"transient1:{transient1.GetHashCode()}"); Console.WriteLine($"transient2:{transient2.GetHashCode()}"); Console.WriteLine($"scoped1:{scoped1.GetHashCode()}"); Console.WriteLine($"scoped2:{scoped2.GetHashCode()}"); Console.WriteLine($"========请求结束========"); return("GetService"); }
public int GetServices([FromServices] IMySingletonService singletonService1, [FromServices] IMySingletonService singletonService2, [FromServices] IMyTransientService transientService1, [FromServices] IMyTransientService transientService2, [FromServices] IMyScopedService scopedService1, [FromServices] IMyScopedService scopedService2) { Console.WriteLine($" singletonService1 的 HashCode={singletonService1.GetHashCode()}"); Console.WriteLine($" singletonService2 的 HashCode={singletonService2.GetHashCode()}"); Console.WriteLine($" transientService1 的 HashCode={transientService1.GetHashCode()}"); Console.WriteLine($" transientService2 的 HashCode={transientService2.GetHashCode()}"); Console.WriteLine($" scopedService1 的 HashCode={scopedService1.GetHashCode()}"); Console.WriteLine($" scopedService2 的 HashCode={scopedService2.GetHashCode()}"); return(1); }
public int GetServices([FromServices] IMySingletonService mySingleton1, [FromServices] IMySingletonService mySingleton2, [FromServices] IMyScopedService myScopedService1, [FromServices] IMyScopedService myScopedService2, [FromServices] IMYTransientService mYTransientService1, [FromServices] IMYTransientService mYTransientService2) { Console.WriteLine($"mySingleton1:{mySingleton1.GetHashCode()}"); Console.WriteLine($"mySingleton2:{mySingleton2.GetHashCode()}"); Console.WriteLine($"myScopedService1:{myScopedService1.GetHashCode()}"); Console.WriteLine($"myScopedService2:{myScopedService2.GetHashCode()}"); Console.WriteLine($"mYTransientService1:{mYTransientService1.GetHashCode()}"); Console.WriteLine($"mYTransientService2:{mYTransientService2.GetHashCode()}"); Console.WriteLine("=========请求结束============"); return(1); }
public int GetService([FromServices] IMySingletonService singleton1, [FromServices] IMySingletonService singleton2, [FromServices] IMyTransientService transient1, [FromServices] IMyTransientService transient2, [FromServices] IMyScopedService scope1, [FromServices] IMyScopedService scope2) { Console.WriteLine($"singleton1:{singleton1.GetHashCode()}"); Console.WriteLine($"singleton2:{singleton2.GetHashCode()}"); Console.WriteLine($"transient1:{transient1.GetHashCode()}"); Console.WriteLine($"transient2:{transient2.GetHashCode()}"); Console.WriteLine($"scope1:{scope1.GetHashCode()}"); Console.WriteLine($"scope2:{scope2.GetHashCode()}"); return(1); }
public int GetService( [FromServices] IMySingletonService singletonService1, [FromServices] IMySingletonService singletonService2, [FromServices] IMyScopedService scopedService1, [FromServices] IMyScopedService scopedService2, [FromServices] IMyTransientService transientService1, [FromServices] IMyTransientService transientService2) { Console.WriteLine($"singleton1:{singletonService1.GetHashCode()}"); Console.WriteLine($"singleton2:{singletonService2.GetHashCode()}"); Console.WriteLine($"scoped1:{scopedService1.GetHashCode()}"); Console.WriteLine($"scoped2:{scopedService2.GetHashCode()}"); Console.WriteLine($"transient1:{transientService1.GetHashCode()}"); Console.WriteLine($"transient2:{transientService2.GetHashCode()}"); Console.WriteLine($"========请求结束========"); //第一次打印: //singleton1: 3129430 //singleton2: 3129430 //scoped1: 37901460 //scoped2: 37901460 //transient1: 4436986 //transient2: 10553853 //========请求结束======== //第二次打印: //singleton1: 3129430 //singleton2: 3129430 //scoped1: 39086322 //scoped2: 39086322 //transient1: 36181605 //transient2: 28068188 //========请求结束======== // 结论: // 1.singleton:在应用程序创建至销毁整个生命周期中都是同一个服务 // 2.scoped:在同一请求中为同一服务,不用请求不同服务 // 3.transient:每获取一次,创建一个新的服务 return(0); }
public int GetService([FromServices] IMySingletonService singleton1, // 通过控制器参数获取服务 [FromServices] IMySingletonService singleton2, [FromServices] IMyTransientService transient1, [FromServices] IMyTransientService transient2, [FromServices] IMyScopedService scoped1, [FromServices] IMyScopedService scoped2) { Console.WriteLine($"singleton1:{singleton1.GetHashCode()}"); Console.WriteLine($"singleton2:{singleton2.GetHashCode()}"); Console.WriteLine($"transient1:{transient1.GetHashCode()}"); Console.WriteLine($"transient2:{transient2.GetHashCode()}"); Console.WriteLine($"scoped1:{scoped1.GetHashCode()}"); Console.WriteLine($"scoped2:{scoped2.GetHashCode()}"); Console.WriteLine($"scoped3:{scoped3.GetHashCode()}"); Console.WriteLine($"========请求结束======="); return(1); }
public String GetService([FromServices] IMySingletonService singleton1, [FromServices] IMySingletonService singleton2, [FromServices] IMyScopedService scoped1, [FromServices] IMyScopedService scoped2, [FromServices] IMyTransientService transient1, [FromServices] IMyTransientService transient2) { Console.WriteLine($"singleton1:{singleton1.GetHashCode()}"); Console.WriteLine($"singleton2:{singleton2.GetHashCode()}"); Console.WriteLine($"scoped1:{scoped1.GetHashCode()}"); Console.WriteLine($"scoped2:{scoped2.GetHashCode()}"); Console.WriteLine($"transient1:{transient1.GetHashCode()}"); Console.WriteLine($"transient2:{transient2.GetHashCode()}"); Console.WriteLine("请求结束"); return("Get servies from IoC container"); }
public int Index([FromServices] IMySingletonService _iMySingletonService1, // [FromServices]:用于从容器中获取对象 [FromServices] IMySingletonService _iMySingletonService2, [FromServices] IMyTransientService _iMyTransientService1, [FromServices] IMyTransientService _iMyTransientService2, [FromServices] IMyScopedService _iMyScopedService1, [FromServices] IMyScopedService _iMyScopedService2) { Console.WriteLine($"单例模式的 HashCode 是相同的:"); Console.WriteLine($"_iMySingletonService1: {_iMySingletonService1.GetHashCode()}"); Console.WriteLine($"_iMySingletonService2: {_iMySingletonService2.GetHashCode()}"); Console.WriteLine($""); Console.WriteLine($"瞬时模式的 HashCode 是不同的:"); Console.WriteLine($"_iMyTransientService1: {_iMyTransientService1.GetHashCode()}"); Console.WriteLine($"_iMyTransientService2: {_iMyTransientService2.GetHashCode()}"); Console.WriteLine($""); Console.WriteLine($"作用域模式的 HashCode 在单次访问时相同的,再次访问是不同的。即每次请求生成新的对象:"); Console.WriteLine($"_iMyScopedService1: {_iMyScopedService1.GetHashCode()}"); Console.WriteLine($"_iMyScopedService2: {_iMyScopedService2.GetHashCode()}"); Console.WriteLine($""); return(1); }
public ServicesController(IMyScopedService scoped, IGenericService <IMyTransientService> genericService) { scoped3 = scoped; // 通过控制器类构造函数获取服务 generic1 = genericService; }
// IMyScopedService is injected into Constructor public PerRequestDIMiddleware2(RequestDelegate next, IMyScopedService myScopedService) { _next = next; _myScopedService = myScopedService; }
public async Task Invoke(HttpContext httpContext, IMyScopedService svc) { svc.MyProperty = 1000; await _next(httpContext); }
public static IApplicationBuilder UseCustomVal(this IApplicationBuilder builder, IMyScopedService svc) { return(builder.UseMiddleware <CustomMiddleware>(svc)); }