Asp.net core 学习笔记 ( DI 依赖注入 )
2017-10-27 12:08
1311 查看
比起 Angular 的依赖注入, core 的相对简单许多, 容易明白
所有 provider 都在 startup 里配置.
controller 就通过 constructor 来注入就可以了.
provider 有 3 个级别
AddSingleton
AddScoped
AddTransient
单列是说整个 App 用一个实例
Scope 一个 request 一个实例
transient 则是每一个注入一个实例
一个模块一般上会提供好多 Service
那么要让 startup 干净一些的话,我们可以包装起来
就好像这样 services.AddEmail();
做法是开一个扩展方法
所有 provider 都在 startup 里配置.
public void ConfigureServices(IServiceCollection services) { services.Configure<Business>(Configuration.GetSection("business")); services.Configure<Configuration.Email>(Configuration.GetSection("email")); services.AddEmail(); // Razor template services.AddSingleton<ICompositeViewEngine, CompositeViewEngine>(); services.AddSingleton<IActionContextAccessor, ActionContextAccessor>(); // Entity services.AddScoped(_ => new DB(Configuration.GetConnectionString("DefaultConnection"))); // hangfire services.AddHangfire(config => config.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection"))); // MVC services.Configure<RazorViewEngineOptions>(options => { options.ViewLocationExpanders.Add(new FeatureLocationExpander()); }); services.AddMvc(); }
controller 就通过 constructor 来注入就可以了.
private readonly DB db; private ICompositeViewEngine CompositeViewEngine { get; set; } private ActionContext ActionContext { get; set; } private IServiceProvider ServiceProvider { get; set; } private ITempDataProvider TempDataProvider { get; set; } private Configuration.Email EmailConfig { get; set; } public DebugController( DB db, ICompositeViewEngine compositeViewEngine, IActionContextAccessor actionContextAccessor, IServiceProvider serviceProvider, ITempDataProvider tempDataProvider, IOptionsSnapshot<Configuration.Email> emailOptionsAccessor ) { CompositeViewEngine = compositeViewEngine; ActionContext = actionContextAccessor.ActionContext; ServiceProvider = serviceProvider; TempDataProvider = tempDataProvider; EmailConfig = emailOptionsAccessor.Value; this.db = db; }
provider 有 3 个级别
AddSingleton
AddScoped
AddTransient
单列是说整个 App 用一个实例
Scope 一个 request 一个实例
transient 则是每一个注入一个实例
一个模块一般上会提供好多 Service
那么要让 startup 干净一些的话,我们可以包装起来
就好像这样 services.AddEmail();
做法是开一个扩展方法
namespace Project.Email { public static class ServiceCollectionExtensions { public static IServiceCollection AddEmail( this IServiceCollection services) { services.AddSingleton<ICompositeViewEngine, CompositeViewEngine>(); services.AddSingleton<IActionContextAccessor, ActionContextAccessor>(); services.AddScoped<EmailService, EmailService>(); return services; } } public class EmailService { public EmailService() { } public string name { get; set; } = "dada"; } }
相关文章推荐
- ASP.NET Core 2.0系列学习笔记-DI依赖注入
- Asp.net core 学习笔记--(1)依赖注入
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(六)-- 依赖注入
- ASP.NET Core 2 学习笔记(四)依赖注入
- (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架
- 学习ASP.NET Core,你必须了解无处不在的“依赖注入”
- 学习ASP.NET Core,你必须了解无处不在的“依赖注入”
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- 学习ASP.NET Core,你必须了解无处不在的“依赖注入”
- ASP.NET Core中的依赖注入(2):依赖注入(DI)
- 【ASP.NET MVC 学习笔记】- 05 依赖注入工具Ninject
- ASP.NET Core中的依赖注入(2):依赖注入(DI)
- 微软企业库5.0学习笔记(10)ASP.NET模块依赖注入
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- ASP.NET_MVC使用Spring.Net.MVC依赖注入学习笔记
- 微软企业库5.0学习笔记(10)ASP.NET模块依赖注入
- [转]使用依赖关系注入在 ASP.NET Core 中编写干净代码
- 3.1依赖注入「深入浅出ASP.NET Core系列」
- ASP.NET Core开发-获取所有注入(DI)服务