netCore使用依赖注入

依赖注入是一种常用的设计模式,用于解耦组件之间的依赖关系。通过依赖注入,我们可以将一个组件所依赖的其他组件的创建和管理工作交给容器来完成,从而实现组件之间的解耦和灵活性

.NET Core提供了内置的依赖注入容器,使我们能够轻松地实现依赖注入。下面是使用依赖注入的步骤:

定义接口

定义一个接口

ICacheUtil

csharp 复制代码
namespace Snblog.Cache.CacheUtil
{
    public interface ICacheUtil
    {
        public T CacheNumber<T>(string key, T value);
        public T CacheString<T>(string key, T value);
    }
}

接口实现类

CacheUtil

csharp 复制代码
using Snblog.Cache.Cache;

namespace Snblog.Cache.CacheUtil
{
    public class CacheUtil:ICacheUtil
    {

        public T CacheNumber<T>(string key, T value)
        {
          // 实现具体的逻辑
        }


        public T CacheString<T>(string key, T value)
        {
          // 实现具体的逻辑
        }
    }
}

注册服务

接下来,需要在依赖注入容器中注册服务。这样,当我们需要使用该服务时,容器将自动创建并提供相应的实例。

.NET Core中,在Startup.cs文件的ConfigureServices方法中进行服务注册。例如,我们可以将IMyService接口和MyService实现类注册为服务:

ConfigureServices

csharp 复制代码
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<ICacheUtil,CacheUtil>();
}

使用依赖注入

csharp 复制代码
private readonly CacheUtil _cacheUtil;
public SnArticleService(ICacheUtil cacheUtil)
{
    _cacheUtil = (CacheUtil) cacheUtil;
}
public IActionResult Index()
{
    _cacheUtil.CacheString("Teset");
    return View();
}

属性注入

csharp 复制代码
[Inject]
private readonly CacheUtil _cacheUtil;
public IActionResult Index()
{
    _cacheUtil.CacheString("Teset");
    return View();
}

生命周期

.NET Core DI 为我们提供的实例生命周期包括三种:

  • Transient: 每一次GetService都会创建一个新的实例
  • Scoped: 在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)
  • Singleton :整个应用程序生命周期以内只创建一个实例
相关推荐
.NET修仙日记几秒前
2026 .NET 面试八股文:高频题 + 答案 + 原理(高级核心篇)
面试·职场和发展·c#·.net·.net core·.net 8
唐青枫2 小时前
终于不用手搓两级缓存了!C#.NET HybridCache 详解:L1 L2、标签失效与防击穿实战
c#·.net
hixiong12315 小时前
C# OpenvinoSharp使用DINOv2模型进行图像相似度计算
开发语言·c#
月昤昽16 小时前
autoCAD二次开发 4.正多边形与collection区分
算法·c#·二次开发·autocad二次开发
Victory_202516 小时前
c#定时器顺序控制写法
开发语言·c#·c#顺序控制+定时器
雪度娃娃20 小时前
基于TCP的网络词典
网络·c++·tcp/ip·c#
xxjj998a21 小时前
PHP vs C#:两大编程语言终极对比
开发语言·c#·php
工程师00721 小时前
C# 泛型:约束、协变逆变、底层模板生成机制
c#·泛型·逆变·协变
bestcxx1 天前
多个维度对 Java、Python、C#、Go 这四种主流编程语言进行比较
java·python·c#
我是唐青枫1 天前
内存为什么越来越高?C#.NET GC 详解:分代回收、LOH、终结器与性能优化实战
性能优化·c#·.net