Dotnet Core依赖注入
1.依赖注入简介 依赖是指一个对象需要另一个对象,在下面到例子中,MyDependency类中存在方法WriteMessage方法,该方法被别的方法所使用: 1 public class MyDependency 2 { 3 public MyDependency() 4 { 5 } 6 7 public Task WriteMessage(string message) 8 { 9 Console.WriteLine( 10 $"MyDependency.WriteMessage called. Message: {message}"); 11 12 return Task.FromResult(0); 13 } 14 } 可以通过创建MyDependency类到实例进而使用方法WriteMessage,下面到 IndexModel类便依赖于MyDependency类: 1 public class IndexModel : PageModel 2 { 3 MyDependency _dependency = new MyDependency(); 4 5 public async Task OnGetAsync() 6 { 7 await _dependency.WriteMessage( 8 "IndexModel.OnGetAsync created this message."); 9 } 10 } 类?IndexModel 依赖于MyDependency 到实例,这种代码到依赖是需要避免到,原因如下:
而依赖注入到存在解决了以下问题:
? 使用依赖注入实现上面的例子, 使用 IMyDependency接口定义提供方法实现到服务: 1 public interface IMyDependency 2 { 3 Task WriteMessage(string message); 4 } 接口的实现如下: 1 public class MyDependency : IMyDependency 2 { 3 private readonly ILogger<MyDependency> _logger; 4 5 public MyDependency(ILogger<MyDependency> logger) 6 { 7 _logger = logger; 8 } 9 10 public Task WriteMessage(string message) 11 { 12 _logger.LogInformation( 13 "MyDependency.WriteMessage called. Message: {MESSAGE}",14 message); 15 16 return Task.FromResult(0); 17 } 18 } MyDependency 在构造函数中请求??ILogger<TCategoryName>?接口。在链式的调用中使用依赖注入是很平常的。
在程序中,IMyDependency服务使用具体的MyDependency服务进行注册,注册到生命周期伴随请求到开始到结束。 1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.Configure<CookiePolicyOptions>(options => 4 { 5 options.CheckConsentNeeded = context => true; 6 options.MinimumSameSitePolicy = SameSiteMode.None; 7 }); 8 9 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 10 11 services.AddScoped<IMyDependency,MyDependency>(); 12 services.AddTransient<IOperationTransient,Operation>(); 13 services.AddScoped<IOperationScoped,Operation>(); 14 services.AddSingleton<IOperationSingleton,Operation>(); 15 services.AddSingleton<IOperationSingletonInstance>(new Operation(Guid.Empty)); 16 17 // OperationService depends on each of the other Operation types. 18 services.AddTransient<OperationService,OperationService>(); 19 } 注:Service.Add{SERVICE_NAME} 扩展方法用于添加(或配置)服务。比方说,Service.AddMvc() 添加了Razor视图和MVC必要到服务。扩展方法到使用需要添加命名空间icrosoft.Extensions.DependencyInjection? ? ? ? 参考: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |