依赖注入
文献来源:《Pro ASP.NET Core MVC》 Adam Freeman 第18章 依赖注入
1 依赖注入原理
- 所有可能变化的地方都用接口
- 在使用接口的地方用什么实体类通过在
ConfigureService中注册解决 - 注册的实体类需要指定在何种生命周期中有效
- Transient
- Scoped
- Singleton
2 接口
接口只定义契约,不定义实现。

//IRepository.cs
using System.Collections.Generic;
namespace DependencyInjection.Models{
public interface IRepository{
IEnumerable<Product> Products{
get;}
Product this[string name]{
get;}
void AddProduct(Product product);
void DeleteProduct(Product product);
}
}
//MemoryRepository.cs
using System.Collections.Generic;
namespace DependencyInjection.Models{
public class MemoryRepository:IRepository{
private Dictionary<string, Product> products;
public MemoryRepository(){
products = new Dictionary<string, Product>();
new List<Product{
new Product{
Name="Kayak", Price=275M},
new Product{
Name="Lifejacket", Price=48.95M},
new Product{
Name="Soccer ball", Price=19.50M},
}.ForEach(p=>AddProduct(p));
}
public IEnumerable<Product> Products => products.Values;
public Product this[string name] => products[name];
public void AddProduct(Product product) => products[product.Name] = product;
public void DeleteProduct(Product product) => products.Remove(product.Name);
}
}
3 数据绑定页面
页面绑定代码使用@model和ViewBag实现。
//Index.cshtml
@using DependencyInjection.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model IEnumerable<Product>
@{layout=null;}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Dependency Injection

本文详细介绍了在ASP.NETCoreMVC中使用依赖注入(DI)的概念,包括接口定义、数据绑定、接口与实体类的映射、不同服务生命周期以及针对Action的依赖注入。通过实例展示了如何在控制器中使用依赖注入并管理不同生命周期的服务。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



