最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.net core項(xiàng)目中自定義服務(wù)的實(shí)現(xiàn)步驟

 更新時(shí)間:2025年07月10日 08:52:56   作者:搬磚的codeer  
本文詳解.NET?Core自定義服務(wù)實(shí)現(xiàn),涵蓋接口定義、類實(shí)現(xiàn)、注冊(Transient/Scoped/Singleton)、注入使用及高級方法(工廠/多實(shí)現(xiàn)),通過緩存服務(wù)案例展示實(shí)際應(yīng)用,強(qiáng)調(diào)松耦合設(shè)計(jì)與生命周期管理對代碼可維護(hù)性的重要性,感興趣的朋友一起看看吧

.NET Core項(xiàng)目中自定義服務(wù)的實(shí)現(xiàn)步驟詳解

導(dǎo)語

在.NET Core開發(fā)中,依賴注入(DI)是一個(gè)核心功能,它允許我們以松耦合的方式組織代碼。自定義服務(wù)是實(shí)現(xiàn)業(yè)務(wù)邏輯的重要組件,本文將詳細(xì)介紹在.NET Core項(xiàng)目中創(chuàng)建和使用自定義服務(wù)的完整步驟,包括核心概念、使用場景和實(shí)戰(zhàn)示例。

核心概念解釋

自定義服務(wù)是指開發(fā)者根據(jù)業(yè)務(wù)需求創(chuàng)建的特定功能類,這些類通過.NET Core的依賴注入系統(tǒng)進(jìn)行管理。服務(wù)通常分為:

  • 瞬時(shí)服務(wù)(Transient):每次請求都創(chuàng)建新實(shí)例
  • 作用域服務(wù)(Scoped):同一請求內(nèi)共享實(shí)例
  • 單例服務(wù)(Singleton):整個(gè)應(yīng)用生命周期共享一個(gè)實(shí)例

使用場景

自定義服務(wù)適用于以下場景:

  • 封裝業(yè)務(wù)邏輯
  • 數(shù)據(jù)訪問層抽象
  • 第三方服務(wù)集成
  • 跨組件共享功能
  • 單元測試模擬

實(shí)現(xiàn)步驟

1. 創(chuàng)建服務(wù)接口

public interface IEmailService
{
    Task SendEmailAsync(string to, string subject, string body);
}

2. 實(shí)現(xiàn)服務(wù)類

public class EmailService : IEmailService
{
    private readonly ILogger<EmailService> _logger;
    public EmailService(ILogger<EmailService> logger)
    {
        _logger = logger;
    }
    public async Task SendEmailAsync(string to, string subject, string body)
    {
        _logger.LogInformation($"準(zhǔn)備發(fā)送郵件到: {to}");
        // 實(shí)際發(fā)送郵件邏輯
        await Task.Delay(100); // 模擬異步操作
        _logger.LogInformation($"郵件發(fā)送成功: {subject}");
    }
}

3. 注冊服務(wù)

Startup.csProgram.cs中注冊服務(wù):

// 瞬態(tài)服務(wù)
builder.Services.AddTransient<IEmailService, EmailService>();
// 作用域服務(wù)
// builder.Services.AddScoped<IEmailService, EmailService>();
// 單例服務(wù)
// builder.Services.AddSingleton<IEmailService, EmailService>();

4. 注入使用服務(wù)

在控制器中使用:

[ApiController]
[Route("api/[controller]")]
public class NotificationController : ControllerBase
{
    private readonly IEmailService _emailService;
    public NotificationController(IEmailService emailService)
    {
        _emailService = emailService;
    }
    [HttpPost("send")]
    public async Task<IActionResult> SendEmail([FromBody] EmailRequest request)
    {
        await _emailService.SendEmailAsync(request.To, request.Subject, request.Body);
        return Ok();
    }
}

高級用法

服務(wù)工廠注冊

builder.Services.AddTransient<IEmailService>(provider => 
{
    var logger = provider.GetRequiredService<ILogger<EmailService>>();
    return new EmailService(logger);
});

多實(shí)現(xiàn)服務(wù)

public interface IMessageService { }
public class SmsService : IMessageService { }
public class PushService : IMessageService { }
// 注冊
builder.Services.AddTransient<IMessageService, SmsService>();
builder.Services.AddTransient<IMessageService, PushService>();
// 獲取所有實(shí)現(xiàn)
public class NotificationService
{
    private readonly IEnumerable<IMessageService> _messageServices;
    public NotificationService(IEnumerable<IMessageService> messageServices)
    {
        _messageServices = messageServices;
    }
}

優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn): - 松耦合設(shè)計(jì),易于維護(hù) - 便于單元測試 - 生命周期管理自動(dòng)化 - 促進(jìn)關(guān)注點(diǎn)分離

缺點(diǎn): - 學(xué)習(xí)曲線較陡 - 過度使用會(huì)導(dǎo)致依賴關(guān)系復(fù)雜 - 調(diào)試可能更困難

實(shí)戰(zhàn)案例:緩存服務(wù)實(shí)現(xiàn)

1. 定義緩存接口

public interface ICacheService
{
    T Get<T>(string key);
    void Set<T>(string key, T value, TimeSpan? expiry = null);
    void Remove(string key);
}

2. 實(shí)現(xiàn)內(nèi)存緩存服務(wù)

public class MemoryCacheService : ICacheService
{
    private readonly IMemoryCache _cache;
    public MemoryCacheService(IMemoryCache cache)
    {
        _cache = cache;
    }
    public T Get<T>(string key)
    {
        return _cache.Get<T>(key);
    }
    public void Set<T>(string key, T value, TimeSpan? expiry = null)
    {
        var options = new MemoryCacheEntryOptions();
        if (expiry.HasValue)
        {
            options.SetAbsoluteExpiration(expiry.Value);
        }
        _cache.Set(key, value, options);
    }
    public void Remove(string key)
    {
        _cache.Remove(key);
    }
}

3. 注冊服務(wù)

builder.Services.AddMemoryCache();
builder.Services.AddSingleton&lt;ICacheService, MemoryCacheService&gt;();

4. 使用示例

public class ProductService
{
    private readonly ICacheService _cache;
    private readonly IProductRepository _repository;
    public ProductService(ICacheService cache, IProductRepository repository)
    {
        _cache = cache;
        _repository = repository;
    }
    public async Task<Product> GetProductByIdAsync(int id)
    {
        string cacheKey = $"product_{id}";
        var product = _cache.Get<Product>(cacheKey);
        if (product == null)
        {
            product = await _repository.GetByIdAsync(id);
            if (product != null)
            {
                _cache.Set(cacheKey, product, TimeSpan.FromMinutes(10));
            }
        }
        return product;
    }
}

小結(jié)

在.NET Core項(xiàng)目中實(shí)現(xiàn)自定義服務(wù)是構(gòu)建可維護(hù)、可測試應(yīng)用程序的關(guān)鍵步驟。通過本文的介紹,我們了解了:

  • 定義服務(wù)接口和實(shí)現(xiàn)類的基本方法
  • 不同生命周期服務(wù)的注冊方式
  • 在控制器和其他服務(wù)中注入使用
  • 高級用法如工廠注冊和多實(shí)現(xiàn)處理
  • 完整的緩存服務(wù)實(shí)戰(zhàn)案例

合理使用自定義服務(wù)可以顯著提高代碼質(zhì)量,建議根據(jù)實(shí)際業(yè)務(wù)需求選擇適當(dāng)?shù)姆?wù)生命周期,并遵循接口隔離原則設(shè)計(jì)服務(wù)接口。

到此這篇關(guān)于.net_core項(xiàng)目中自定義服務(wù)的實(shí)現(xiàn)步驟有哪些的文章就介紹到這了,更多相關(guān).net_core項(xiàng)目中自定義服務(wù)的實(shí)現(xiàn)步驟有哪些內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何在.NET Core應(yīng)用中使用NHibernate詳解

    如何在.NET Core應(yīng)用中使用NHibernate詳解

    NHibernate 是一個(gè)基于.Net 的針對關(guān)系型數(shù)據(jù)庫的對象持久化類庫。下面這篇文章主要給大家介紹了關(guān)于如何在.NET Core應(yīng)用中使用NHibernate的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-08-08
  • VS2022?安裝.NET4.5目標(biāo)包的方法

    VS2022?安裝.NET4.5目標(biāo)包的方法

    眾所周知VS2022將不再支持.NET4.5,即使在Visual?Studio?Installer中也找不到.NET4.5的選項(xiàng),這篇文章主要介紹了VS2022?安裝.NET4.5目標(biāo)包,需要的朋友可以參考下
    2021-12-12
  • 詳解一款開源免費(fèi)的.NET文檔操作組件DocX(.NET組件介紹之一)

    詳解一款開源免費(fèi)的.NET文檔操作組件DocX(.NET組件介紹之一)

    本篇文章主要是介紹了一款開源免費(fèi)的.NET文檔操作組件DocX,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • DropDownList根據(jù)下拉項(xiàng)的Text文本序號排序

    DropDownList根據(jù)下拉項(xiàng)的Text文本序號排序

    在某些時(shí)候表中沒有可以排序的字段同時(shí)呢也不想修改表結(jié)構(gòu),但它的項(xiàng)文本有序號這時(shí)就可以用這方法排序,感興趣的你可以參考下,或許本文知識點(diǎn)對你有所幫助
    2013-03-03
  • Microsoft Visual Studio 2010下如何添加命令提示行

    Microsoft Visual Studio 2010下如何添加命令提示行

    這篇文章主要介紹了Microsoft Visual Studio 2010下如何添加命令提示行的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • .NET Core中使用Redis與Memcached的序列化問題詳析

    .NET Core中使用Redis與Memcached的序列化問題詳析

    這篇文章主要介紹了.NET Core中使用Redis與Memcached的序列化問題的相關(guān)內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • asp.net 抓取網(wǎng)頁源碼三種實(shí)現(xiàn)方法

    asp.net 抓取網(wǎng)頁源碼三種實(shí)現(xiàn)方法

    asp.net 抓取網(wǎng)頁源碼三種實(shí)現(xiàn)方法,需要的朋友可以參考一下
    2013-06-06
  • C# 小數(shù)位數(shù)保留的方法集錦

    C# 小數(shù)位數(shù)保留的方法集錦

    c#下關(guān)于小數(shù)位數(shù)的一些實(shí)現(xiàn)方法集合,方便對c#小數(shù)位數(shù)控制的朋友。
    2008-12-12
  • 登錄時(shí)記住用戶名和密碼及cookie案例應(yīng)用

    登錄時(shí)記住用戶名和密碼及cookie案例應(yīng)用

    本文將實(shí)現(xiàn)登錄時(shí)記住用戶的帳號密碼,接下來我們來模擬一個(gè)登錄介面,要把這個(gè)登錄的信息記錄至Cookie,還要把Cookie的過期時(shí)間設(shè)置7天之后過期,感興趣的朋友可以參考下,希望本文對你的cookie學(xué)習(xí)有所幫助
    2013-01-01
  • ASP.NET?Core?MVC中Tag?Helpers用法介紹

    ASP.NET?Core?MVC中Tag?Helpers用法介紹

    這篇文章介紹了ASP.NET?Core?MVC中Tag?Helpers的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02

最新評論

固原市| 贡山| 海口市| 澎湖县| 探索| 安国市| 日土县| 芒康县| 冷水江市| 通海县| 英超| 绍兴市| 舟曲县| 阳朔县| 阿克| 南阳市| 易门县| 天津市| 诏安县| 高要市| 甘肃省| 分宜县| 景谷| 姜堰市| 华蓥市| 安塞县| 寻甸| 天峻县| 屯门区| 阜新市| 怀仁县| 休宁县| 雷州市| 白银市| 铅山县| 江西省| 许昌市| 德令哈市| 宝鸡市| 贡山| 金塔县|