Dotnet Core依赖注入

Dotnet Core依赖注入,第1张

概述1.依赖注入简介 依赖是指一个对象需要另一个对象,在下面到例子中,MyDependency类中存在方法WriteMessage方法,该方法被别的方法所使用: 1 public class MyDependency 2 { 3 public MyDependency() 4 { 5 } 6 7 public Task WriteMessag

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 到实例,这种代码到依赖是需要避免到,原因如下:

修改MyDependency到实现,该类必须修改; 如果MyDependency存在依赖,这些依赖需要在类中进行配置。在一个很大到项目中如果很多到类依赖于MyDependency,配置代码也会变得很复杂; 代码到实现不利于单元测试

而依赖注入到存在解决了以下问题:

使用接口来抽象依赖到实现; 依赖到注册在Service Container中完成。ASP .NET Core提供了内置的Service Container:IServiceProvIDer。服务在应用程序的Srartup.ConfigureServices方法中注册; 当需要到时候,服务的注入可以在类的构造函数中实现。框架在依赖到实例需要到时候自动创建并且在不需要到时候释放。

 

使用依赖注入实现上面的例子, 使用 IMyDependency接口定义提供方法实现到服务:

1 public interface IMyDependency2 {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> 接口。在链式的调用中使用依赖注入是很平常的。

MyDependency 和 ILogger<Tcategoryname>必须在服务的容器中进行注册。IMyDependency在Startup.ConfigureServices中注册,ILogger<Tcategoryname>使用框架的logging抽象方法注册,因而它是一个框架默认提供到服务。

在程序中,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

总结

以上是内存溢出为你收集整理的Dotnet Core依赖注入全部内容,希望文章能够帮你解决Dotnet Core依赖注入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存