ASP.NET Core MVC依赖注入理解(极简个人版)

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

依赖注入

文献来源:《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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值