日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...

發(fā)布時(shí)間:2023/12/3 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OsharpNS輕量級(jí).net core快速開發(fā)框架簡(jiǎn)明入門教程

教程目錄

  1. 從零開始啟動(dòng)Osharp

    1.1. 使用OsharpNS項(xiàng)目模板創(chuàng)建項(xiàng)目

    1.2. 配置數(shù)據(jù)庫(kù)連接串并啟動(dòng)項(xiàng)目

    1.3. OsharpNS.Swagger使用實(shí)例(登錄和授權(quán))

    1.4. Angular6的前端項(xiàng)目啟動(dòng)

  2. Osharp代碼生成器的使用

    2.1 生成器的使用

    2.2 生成代碼詳解(如何自己實(shí)現(xiàn)業(yè)務(wù)功能)

  3. Osharp部分模塊使用

    3.1 Osharp.Redis使用

    3.2 Osharp.Hangfire使用

    3.3 Osharp.Permissions使用

  4. Osharp深度學(xué)習(xí)和使用

    4.1 切換數(shù)據(jù)庫(kù)(從SqlServer改為MySql)

    4.2 多上下文配置(多個(gè)數(shù)據(jù)庫(kù)的使用)

    4.3. 自定義模塊的定義(Senparc.Weixin的使用)

    4.4. 繼續(xù)學(xué)習(xí)中....

OsharpNS官方資源
項(xiàng)目地址:https://github.com/i66soft/osharp-ns20
演示地址:https://www.osharp.org 直接使用QQ登錄可以查看效果
文檔地址:https://docs.osharp.org 正在完善中....
發(fā)布博客:https://www.cnblogs.com/guomingfeng/p/osharpns-publish.html 大神看這個(gè)文檔應(yīng)該就能跑起來(lái),從零開始啟動(dòng)Osharp基于此文檔完成
VS生成器插件:https://marketplace.visualstudio.com/items?itemName=LiuliuSoft.osharp
官方交流QQ群:85895249

基于Osharp實(shí)現(xiàn)自己的業(yè)務(wù)功能

目錄

  1. 基于Osharp實(shí)現(xiàn)業(yè)務(wù)的編碼流程

  2. Core模塊代碼

  3. EntityConfiguration模塊代碼

  4. WebApi模塊代碼

基于Osharp實(shí)現(xiàn)業(yè)務(wù)的編碼流程

本篇基于教程前面的項(xiàng)目和生成的代碼展開,CanDoo.Test是使用項(xiàng)目模板創(chuàng)建的項(xiàng)目命名空間,CMS是使用生成器創(chuàng)建的內(nèi)容管理模塊,如不明白,請(qǐng)看前面的教程。

  1. 根據(jù)業(yè)務(wù)需求,確定需要開發(fā)的模塊,和各個(gè)模塊需要的實(shí)體及實(shí)體屬性

  2. 根據(jù)業(yè)務(wù)需要分模塊定義實(shí)體屬性,位于CanDoo.Test.Core/CMS/Entities

  3. 根據(jù)實(shí)體的定義,完成實(shí)體各屬性的數(shù)據(jù)庫(kù)配置,位于CanDoo.Test.EntityConfiguration/CMS/

  4. 根據(jù)業(yè)務(wù)需要定義輸入、輸出Dto,位于CanDoo.Test.Core/CMS/Dtos

  5. 根據(jù)業(yè)務(wù)需要定義此實(shí)體對(duì)應(yīng)的功能接口,位于CanDoo.Test.Core/CMS

  6. 根據(jù)業(yè)務(wù)需求實(shí)現(xiàn)功能,位于CanDoo.Test.Core/CMS

  7. 新建一個(gè)自定義模塊,完成接口和服務(wù)的依賴注入,位于CanDoo.Test.Core/CMS

  8. 新建一個(gè)控制器,調(diào)用對(duì)應(yīng)模塊的接口,定義對(duì)應(yīng)功能的WebApi,前端調(diào)用WebApi完成用戶界面,位于CanDoo.Test.Web/Areas/Admin/Controllers/CMS

  9. 下圖為接下去講解代碼在項(xiàng)目中的位置,很多文件以.generated.cs,此文件為代碼自動(dòng)生成的模板代碼,實(shí)現(xiàn)了基礎(chǔ)的增刪改查操作,當(dāng)使用生成器重新生成代碼時(shí),此文件會(huì)被覆蓋,如果實(shí)現(xiàn)代碼需要改動(dòng),不建議直接在此文件上改動(dòng),建議新建一個(gè)文件,繼承自以.generated.cs結(jié)尾的文件,在新文件中改動(dòng)相關(guān)的實(shí)現(xiàn),從而避免重新生成代碼,導(dǎo)致自定義代碼被覆蓋

Core模塊代碼

接下去以CMS模塊中的Article為了來(lái)講解相關(guān)代碼

  1. 實(shí)體的定義:

    EntityBase:定義了主鍵Id的類型為int

    ILockable:定義可鎖定功能,需定義屬性:IsLocked

    ISoftDeletable:定義邏輯刪除功能,需定義屬性:DeletedTime

    ICreationAudited:定義創(chuàng)建審計(jì)信息,需定義屬性:CreatorId,CreatedTime

    IUpdateAudited:定義更新審計(jì)信息,需定義屬性:LastUpdaterId,LastUpdatedTime

    //------------------------------------------------------------------------------
    // <auto-generated>
    //    此代碼由代碼生成器生成。
    //    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。
    //    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。
    //    如果需要擴(kuò)展此類,請(qǐng)新建分部類 partial class Article 進(jìn)行擴(kuò)展
    // </auto-generated>
    //
    //  <copyright file="Article.generated.cs" company="杭州乾渡科技有限公司">
    //      Copyright  2019 乾渡科技出品
    //  </copyright>
    //  <site>https://www.osharp.org</site>
    //  <last-editor>atai</last-editor>
    //  <last-date>2019-04-27 10:04</last-date>
    // -----------------------------------------------------------------------using System;
    using System.Collections.Generic;
    using System.ComponentModel;using OSharp.Entity;using CanDoo.Test.Identity.Entities;namespace CanDoo.Test.CMS.Entities{/// <summary>/// 實(shí)體類:文章信息/// </summary>[Description("文章信息")]public partial class Article : EntityBase<int>, ILockable, ISoftDeletable, ICreationAudited<int>, IUpdateAudited<int>{/// <summary>/// 獲取或設(shè)置 標(biāo)題/// </summary>[DisplayName("標(biāo)題")]public string Title { get; set; }/// <summary>/// 獲取或設(shè)置 內(nèi)容/// </summary>[DisplayName("內(nèi)容")]public string Content { get; set; }/// <summary>/// 獲取或設(shè)置 是否鎖定/// </summary>[DisplayName("是否鎖定")]public bool IsLocked { get; set; }/// <summary>/// 獲取或設(shè)置 刪除時(shí)間/// </summary>[DisplayName("刪除時(shí)間")]public DateTime? DeletedTime { get; set; }/// <summary>/// 獲取或設(shè)置 創(chuàng)建者/// </summary>[DisplayName("創(chuàng)建者")]public int? CreatorId { get; set; }/// <summary>/// 獲取或設(shè)置 創(chuàng)建時(shí)間/// </summary>[DisplayName("創(chuàng)建時(shí)間")]public DateTime CreatedTime { get; set; }/// <summary>/// 獲取或設(shè)置 更新者/// </summary>[DisplayName("更新者")]public int? LastUpdaterId { get; set; }/// <summary>/// 獲取或設(shè)置 更新時(shí)間/// </summary>[DisplayName("更新時(shí)間")]public DateTime? LastUpdatedTime { get; set; }/// <summary>/// 獲取或設(shè)置 分類外鍵/// </summary>[DisplayName("分類外鍵")]public int ArticleCategoryId { get; set; }/// <summary>/// 獲取或設(shè)置 發(fā)布人外鍵/// </summary>[DisplayName("發(fā)布人外鍵")]public int? UserId { get; set; }/// <summary>/// 獲取或設(shè)置 分類/// </summary>[DisplayName("分類")]public virtual ArticleCategory ArticleCategory { get; set; }/// <summary>/// 獲取或設(shè)置 發(fā)布人/// </summary>[DisplayName("發(fā)布人")]public virtual User User { get; set; }}}
  2. InputDto的定義:此Dto用于向系統(tǒng)輸入數(shù)據(jù)的時(shí)候,比如新增數(shù)據(jù),編輯數(shù)據(jù)時(shí),通過(guò)InputDto來(lái)提供數(shù)據(jù)

    IInputDto:定義了主鍵類型為int

    
    // -----------------------------------------------------------------------
    // <auto-generated>
    //    此代碼由代碼生成器生成。
    //    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。
    //    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。
    //    如果需要擴(kuò)展此類,請(qǐng)新建分部類 partial class ArticleInputDto 進(jìn)行擴(kuò)展
    // </auto-generated>
    //
    //  <copyright file="ArticleInputDto.generated.cs" company="杭州乾渡科技有限公司">
    //      Copyright  2019 乾渡科技出品
    //  </copyright>
    //  <site>https://www.osharp.org</site>
    //  <last-editor>atai</last-editor>
    //  <last-date>2019-04-27 10:04</last-date>
    // -----------------------------------------------------------------------using System;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;using OSharp.Entity;
    using OSharp.Mapping;using CanDoo.Test.CMS.Entities;namespace CanDoo.Test.CMS.Dtos
    {/// <summary>/// 輸入DTO:文章信息/// </summary>[MapTo(typeof(Article))][Description("文章信息")]public partial class ArticleInputDto : IInputDto<int>{/// <summary>/// 獲取或設(shè)置 編號(hào)/// </summary>[DisplayName("編號(hào)")]public int Id { get; set; }/// <summary>/// 獲取或設(shè)置 分類外鍵/// </summary>[DisplayName("分類外鍵")]public int ArticleCategoryId { get; set; }/// <summary>/// 獲取或設(shè)置 標(biāo)題/// </summary>[DisplayName("標(biāo)題")]public string Title { get; set; }/// <summary>/// 獲取或設(shè)置 內(nèi)容/// </summary>[DisplayName("內(nèi)容")]public string Content { get; set; }/// <summary>/// 獲取或設(shè)置 發(fā)布人外鍵/// </summary>[DisplayName("發(fā)布人外鍵")]public int UserId { get; set; }/// <summary>/// 獲取或設(shè)置 是否鎖定/// </summary>[DisplayName("是否鎖定")]public bool IsLocked { get; set; }}}
  3. OutDto的定義:此Dto用于輸出數(shù)據(jù)給用戶時(shí)候,比如數(shù)據(jù)列表展示,展示數(shù)據(jù)詳情的時(shí)候,通過(guò)OutDto來(lái)提供數(shù)據(jù)

    IDataAuthEnabled:定義數(shù)據(jù)權(quán)限的允許更新,允許刪除狀態(tài),需定義:Updatable,Deletable

    // -----------------------------------------------------------------------
    // <auto-generated>
    //    此代碼由代碼生成器生成。
    //    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。
    //    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。
    //    如果需要擴(kuò)展此類,請(qǐng)新建分部類 partial class ArticleOutputDto 進(jìn)行擴(kuò)展
    // </auto-generated>
    //
    //  <copyright file="ArticleOutputDto.generated.cs" company="杭州乾渡科技有限公司">
    //      Copyright  2019 乾渡科技出品
    //  </copyright>
    //  <site>https://www.osharp.org</site>
    //  <last-editor>atai</last-editor>
    //  <last-date>2019-04-27 10:04</last-date>
    // -----------------------------------------------------------------------using System;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;using OSharp.Entity;
    using OSharp.Mapping;using CanDoo.Test.CMS.Entities;
    using CanDoo.Test.Identity.Entities;namespace CanDoo.Test.CMS.Dtos
    {/// <summary>/// 輸入DTO:文章信息/// </summary>[MapFrom(typeof(Article))][Description("文章信息")]public partial class ArticleOutputDto : IOutputDto, IDataAuthEnabled{/// <summary>/// 獲取或設(shè)置 編號(hào)/// </summary>[DisplayName("編號(hào)")]public int Id { get; set; }/// <summary>/// 獲取或設(shè)置 分類/// </summary>[DisplayName("分類")]public ArticleCategory ArticleCategory { get; set; }/// <summary>/// 獲取或設(shè)置 標(biāo)題/// </summary>[DisplayName("標(biāo)題")]public string Title { get; set; }/// <summary>/// 獲取或設(shè)置 內(nèi)容/// </summary>[DisplayName("內(nèi)容")]public string Content { get; set; }/// <summary>/// 獲取或設(shè)置 發(fā)布人/// </summary>[DisplayName("發(fā)布人")]public User User { get; set; }/// <summary>/// 獲取或設(shè)置 是否鎖定/// </summary>[DisplayName("是否鎖定")]public bool IsLocked { get; set; }/// <summary>/// 獲取或設(shè)置 創(chuàng)建者/// </summary>[DisplayName("創(chuàng)建者")]public int CreatorId { get; set; }/// <summary>/// 獲取或設(shè)置 創(chuàng)建時(shí)間/// </summary>[DisplayName("創(chuàng)建時(shí)間")]public DateTime CreatedTime { get; set; }/// <summary>/// 獲取或設(shè)置 更新者/// </summary>[DisplayName("更新者")]public int LastUpdaterId { get; set; }/// <summary>/// 獲取或設(shè)置 更新時(shí)間/// </summary>[DisplayName("更新時(shí)間")]public DateTime LastUpdatedTime { get; set; }/// <summary>/// 獲取或設(shè)置 是否可更新的數(shù)據(jù)權(quán)限狀態(tài)/// </summary>public bool Updatable { get; set; }/// <summary>/// 獲取或設(shè)置 是否可刪除的數(shù)據(jù)權(quán)限狀態(tài)/// </summary>public bool Deletable { get; set; }}}
  4. 接口的定義:定義需要的接口

    // -----------------------------------------------------------------------
    // <auto-generated>
    //    此代碼由代碼生成器生成。
    //    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。
    //    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。
    //    如果需要擴(kuò)展此接口,請(qǐng)新建分部接口 partial interface ICMSContract 添加新的方法,并添加相應(yīng)新的分部基類 abstract partial class CMSServiceBase 實(shí)現(xiàn)新方法
    // </auto-generated>
    //
    //  <copyright file="ICMSContract.generated.cs" company="杭州乾渡科技有限公司">
    //      Copyright  2019 乾渡科技出品
    //  </copyright>
    //  <site>https://www.osharp.org</site>
    //  <last-editor>atai</last-editor>
    //  <last-date>2019-04-27 10:04</last-date>
    // -----------------------------------------------------------------------using System;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Threading.Tasks;using OSharp.Data;
    using OSharp.Extensions;using CanDoo.Test.CMS.Dtos;
    using CanDoo.Test.CMS.Entities;namespace CanDoo.Test.CMS
    {/// <summary>/// 業(yè)務(wù)契約接口:內(nèi)容管理模塊/// </summary>public partial interface ICMSContract{#region 文章分類信息業(yè)務(wù)#endregion#region 文章信息業(yè)務(wù)/// <summary>/// 獲取 文章信息查詢數(shù)據(jù)集/// </summary>IQueryable<Article> Articles { get; }/// <summary>/// 檢查文章信息信息是否存在/// </summary>/// <param name="predicate">檢查謂語(yǔ)表達(dá)式</param>/// <param name="id">更新的文章信息編號(hào)</param>/// <returns>文章信息是否存在</returns>Task<bool> CheckArticleExists(Expression<Func<Article, bool>> predicate, int id = default(int));/// <summary>/// 添加文章信息信息/// </summary>/// <param name="dtos">要添加的文章信息DTO信息</param>/// <returns>業(yè)務(wù)操作結(jié)果</returns>Task<OperationResult> CreateArticles(params ArticleInputDto[] dtos);/// <summary>/// 更新文章信息信息/// </summary>/// <param name="dtos">包含更新信息的文章信息DTO信息</param>/// <returns>業(yè)務(wù)操作結(jié)果</returns>Task<OperationResult> UpdateArticles(params ArticleInputDto[] dtos);/// <summary>/// 刪除文章信息信息/// </summary>/// <param name="ids">要?jiǎng)h除的文章信息編號(hào)</param>/// <returns>業(yè)務(wù)操作結(jié)果</returns>Task<OperationResult> DeleteArticles(params int[] ids);#endregion#region 留言板信息業(yè)務(wù)#endregion}}
  5. 功能實(shí)現(xiàn):因?yàn)橐粋€(gè)功能模塊中會(huì)有大量的實(shí)體,系統(tǒng)中將各個(gè)實(shí)體的具體實(shí)現(xiàn)進(jìn)行了文件的拆分,從前面的圖中可以看出,Article的具體實(shí)現(xiàn)位于CMSServiceBase.Article.generated.csCMSServiceBase.generated.cs定義了CMS模塊所有需要使用到的對(duì)象,CMSService.cs為模塊的業(yè)務(wù)實(shí)現(xiàn)基類

   // -----------------------------------------------------------------------// <auto-generated>//    此代碼由代碼生成器生成。//    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。//    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。//    如果需要擴(kuò)展此類,可以遵守如下規(guī)則進(jìn)行擴(kuò)展://      1.橫向擴(kuò)展:如需給當(dāng)前實(shí)體 Article 添加方法,可新建文件“CMSServiceBase.Article.cs”的分部類“public abstract partial class CMSServiceBase”添加功能//      2.縱向擴(kuò)展:如需要重寫當(dāng)前實(shí)體 Article 的業(yè)務(wù)實(shí)現(xiàn),可新建文件“CMSService.Article.cs”的分部類“public partial class CMSService”對(duì)現(xiàn)有方法進(jìn)行方法重寫實(shí)現(xiàn)// </auto-generated>////  <copyright file="CMSServiceBase.Article.generated.cs" company="杭州乾渡科技有限公司">//      Copyright  2019 乾渡科技出品//  </copyright>//  <site>https://www.osharp.org</site>//  <last-editor>atai</last-editor>//  <last-date>2019-04-27 10:04</last-date>// -----------------------------------------------------------------------using System;using System.Linq;using System.Linq.Expressions;using System.Threading.Tasks;using OSharp.Data;using OSharp.Dependency;using OSharp.Extensions;using OSharp.Mapping;using CanDoo.Test.CMS.Dtos;using CanDoo.Test.CMS.Entities;namespace CanDoo.Test.CMS{public abstract partial class CMSServiceBase{/// <summary>/// 獲取 文章信息查詢數(shù)據(jù)集/// </summary>public IQueryable<Article> Articles{get { return ArticleRepository.Query(); }}/// <summary>/// 檢查文章信息是否存在/// </summary>/// <param name="predicate">檢查謂語(yǔ)表達(dá)式</param>/// <param name="id">更新的文章信息編號(hào)</param>/// <returns>文章信息是否存在</returns>public virtual Task<bool> CheckArticleExists(Expression<Func<Article, bool>> predicate, int id = default(int)){return ArticleRepository.CheckExistsAsync(predicate, id);}/// <summary>/// 添加文章信息/// </summary>/// <param name="dtos">要添加的文章信息DTO信息</param>/// <returns>業(yè)務(wù)操作結(jié)果</returns>public virtual Task<OperationResult> CreateArticles(params ArticleInputDto[] dtos){Check.NotNull(dtos, nameof(dtos));return ArticleRepository.InsertAsync(dtos);}/// <summary>/// 更新文章信息/// </summary>/// <param name="dtos">包含更新信息的文章信息DTO信息</param>/// <returns>業(yè)務(wù)操作結(jié)果</returns>public virtual Task<OperationResult> UpdateArticles(params ArticleInputDto[] dtos){Check.NotNull(dtos, nameof(dtos));return ArticleRepository.UpdateAsync(dtos);}/// <summary>/// 刪除文章信息/// </summary>/// <param name="ids">要?jiǎng)h除的文章信息編號(hào)</param>/// <returns>業(yè)務(wù)操作結(jié)果</returns>public virtual Task<OperationResult> DeleteArticles(params int[] ids){Check.NotNull(ids, nameof(ids));return ArticleRepository.DeleteAsync(ids);}}}
// -----------------------------------------------------------------------// <auto-generated>//    此代碼由代碼生成器生成。//    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。//    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。//    如果需要擴(kuò)展此類,請(qǐng)?jiān)诳刂破黝愋?CMSService 進(jìn)行繼承重寫// </auto-generated>////  <copyright file="ICMSServiceBase.generated.cs" company="杭州乾渡科技有限公司">//      Copyright  2019 乾渡科技出品//  </copyright>//  <site>https://www.osharp.org</site>//  <last-editor>atai</last-editor>//  <last-date>2019-04-27 10:04</last-date>// -----------------------------------------------------------------------using System;using System.Linq;using System.Threading.Tasks;using OSharp.Core.Systems;using OSharp.Data;using OSharp.Entity;using OSharp.EventBuses;using OSharp.Extensions;using OSharp.Identity;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;using CanDoo.Test.CMS.Dtos;using CanDoo.Test.CMS.Entities;namespace CanDoo.Test.CMS{/// <summary>/// 業(yè)務(wù)實(shí)現(xiàn)基類:內(nèi)容管理模塊/// </summary>public abstract partial class CMSServiceBase : ICMSContract{/// <summary>/// 初始化一個(gè)<see cref="CMSService"/>類型的新實(shí)例/// </summary>protected CMSServiceBase(IServiceProvider provider){ServiceProvider = provider;Logger = provider.GetLogger(GetType());}#region 屬性/// <summary>/// 獲取或設(shè)置 服務(wù)提供者對(duì)象/// </summary>protected IServiceProvider ServiceProvider { get; }/// <summary>/// 獲取或設(shè)置 日志對(duì)象/// </summary>protected ILogger Logger { get; }/// <summary>/// 獲取或設(shè)置 文章分類信息倉(cāng)儲(chǔ)對(duì)象/// </summary>protected IRepository<ArticleCategory, int> ArticleCategoryRepository => ServiceProvider.GetService<IRepository<ArticleCategory, int>>();/// <summary>/// 獲取或設(shè)置 文章信息倉(cāng)儲(chǔ)對(duì)象/// </summary>protected IRepository<Article, int> ArticleRepository => ServiceProvider.GetService<IRepository<Article, int>>();/// <summary>/// 獲取或設(shè)置 留言板信息倉(cāng)儲(chǔ)對(duì)象/// </summary>protected IRepository<MessageBoard, int> MessageBoardRepository => ServiceProvider.GetService<IRepository<MessageBoard, int>>();/// <summary>/// 獲取 事件總線/// </summary>protected IEventBus EventBus => ServiceProvider.GetService<IEventBus>();/// <summary>/// 獲取 設(shè)置存儲(chǔ)對(duì)象/// </summary>protected IKeyValueStore KeyValueStore => ServiceProvider.GetService<IKeyValueStore>();#endregion}}
   // -----------------------------------------------------------------------// <once-generated>//     這個(gè)文件只生成一次,再次生成不會(huì)被覆蓋。//     可以在此類進(jìn)行繼承重寫來(lái)擴(kuò)展基類 CMSServiceBase// </once-generated>////  <copyright file="ICMSService.cs" company="Qiadoo">//      隨便用//  </copyright>//  <site>http://www.qiadoo.com</site>//  <last-editor>atai</last-editor>//  <last-date>2019-04-26 13:52</last-date>// -----------------------------------------------------------------------using System;namespace CanDoo.Test.CMS{/// <summary>/// 業(yè)務(wù)實(shí)現(xiàn)基類:內(nèi)容管理模塊/// </summary>public partial class CMSService : CMSServiceBase{/// <summary>/// 初始化一個(gè)<see cref="CMSService"/>類型的新實(shí)例/// </summary>public CMSService(IServiceProvider provider): base(provider){ }}}
  1. 模塊定義:將模塊服務(wù)添加到依賴注入服務(wù)容器中

    OsharpPack:系統(tǒng)啟動(dòng)的時(shí)候會(huì)自動(dòng)查找繼承自O(shè)sharpPack的模塊,完成加載

    // -----------------------------------------------------------------------
    // <auto-generated>
    //    此代碼由代碼生成器生成。
    //    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。
    //    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。
    //    如果需要擴(kuò)展此類,請(qǐng)新建分部類 partial class CMSPack 進(jìn)行實(shí)現(xiàn)分部方法 AddServicesAppend,UsePackAppend 進(jìn)行擴(kuò)展
    // </auto-generated>
    //
    //  <copyright file="ICMSPack.generated.cs" company="杭州乾渡科技有限公司">
    //      Copyright  2019 乾渡科技出品
    //  </copyright>
    //  <site>https://www.osharp.org</site>
    //  <last-editor>atai</last-editor>
    //  <last-date>2019-04-27 10:04</last-date>
    // -----------------------------------------------------------------------using System;
    using System.ComponentModel;using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.DependencyInjection.Extensions;using OSharp.Core.Packs;namespace CanDoo.Test.CMS
    {/// <summary>/// 內(nèi)容管理模塊/// </summary>[Description("內(nèi)容管理模塊")]public partial class CMSPack : OsharpPack{/// <summary>將模塊服務(wù)添加到依賴注入服務(wù)容器中</summary>/// <param name="services">依賴注入服務(wù)容器</param>/// <returns></returns>public override IServiceCollection AddServices(IServiceCollection services){services.TryAddScoped<ICMSContract, CMSService>();AddServicesAppend(services);return services;}/// <summary>/// 額外的服務(wù)注冊(cè)/// </summary>/// <param name="services">依賴注入服務(wù)容器</param>partial void AddServicesAppend(IServiceCollection services);/// <summary>/// 應(yīng)用模塊服務(wù)/// </summary>/// <param name="provider">服務(wù)提供者</param>public override void UsePack(IServiceProvider provider){UsePackAppend(provider);base.UsePack(provider);}/// <summary>/// 額外的服務(wù)注冊(cè)/// </summary>/// <param name="provider">服務(wù)提供者</param>partial void UsePackAppend(IServiceProvider provider);}}

EntityConfiguration模塊代碼解析

直接貼代碼了,在這里完成了各個(gè)屬性的數(shù)據(jù)庫(kù)配置,以下2行都是多對(duì)一的配置,第一條是文章和文章分類實(shí)現(xiàn)雙向?qū)Ш?#xff0c;第二條是文章和用戶的單向?qū)Ш?#xff0c;當(dāng)然在這里還能指定表的名稱等等,反正數(shù)據(jù)庫(kù)想怎么配置就在這里折騰吧

builder.HasOne<ArticleCategory>(m => m.ArticleCategory).WithMany(n => n.Articles).HasForeignKey(m => m.ArticleCategoryId).IsRequired().OnDelete(DeleteBehavior.Restrict);
builder.HasOne<User>(m => m.User).WithMany().HasForeignKey(m => m.UserId).IsRequired().OnDelete(DeleteBehavior.Restrict);
//------------------------------------------------------------------------------
// <auto-generated>
//    此代碼由代碼生成器生成。
//    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。
//    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。
//    如果需要擴(kuò)展此類,請(qǐng)新建分部類 partial class ArticleConfiguration 實(shí)現(xiàn)分部方法 EntityConfigurationAppend 進(jìn)行擴(kuò)展
// </auto-generated>
//
//  <copyright file="ArticleConfiguration.generated.cs" company="杭州乾渡科技有限公司">
//      Copyright  2019 乾渡科技出品
//  </copyright>
//  <site>https://www.osharp.org</site>
//  <last-editor>atai</last-editor>
//  <last-date>2019-04-27 10:04</last-date>
// -----------------------------------------------------------------------using System;using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;using OSharp.Entity;using CanDoo.Test.CMS.Entities;
using CanDoo.Test.Identity.Entities;namespace CanDoo.Test.EntityConfiguration.CMS
{/// <summary>/// 實(shí)體配置類:文章信息/// </summary>public partial class ArticleConfiguration : EntityTypeConfigurationBase<Article, int>{/// <summary>/// 重寫以實(shí)現(xiàn)實(shí)體類型各個(gè)屬性的數(shù)據(jù)庫(kù)配置/// </summary>/// <param name="builder">實(shí)體類型創(chuàng)建器</param>public override void Configure(EntityTypeBuilder<Article> builder){builder.HasOne<ArticleCategory>(m => m.ArticleCategory).WithMany(n => n.Articles).HasForeignKey(m => m.ArticleCategoryId).IsRequired().OnDelete(DeleteBehavior.Restrict);builder.HasOne<User>(m => m.User).WithMany().HasForeignKey(m => m.UserId).IsRequired().OnDelete(DeleteBehavior.Restrict);EntityConfigurationAppend(builder);}/// <summary>/// 額外的數(shù)據(jù)映射/// </summary>partial void EntityConfigurationAppend(EntityTypeBuilder<Article> builder);}}

WebApi模塊代碼

還是沒(méi)啥說(shuō)的,自己看代碼吧,注意看下對(duì)AdminApiController的繼承,


// -----------------------------------------------------------------------
//  <copyright file="AdminApiController.cs" company="OSharp開源團(tuán)隊(duì)">
//      Copyright (c) 2014-2018 OSharp. All rights reserved.
//  </copyright>
//  <site>http://www.osharp.org</site>
//  <last-editor>郭明鋒</last-editor>
//  <last-date>2018-06-27 4:50</last-date>
// -----------------------------------------------------------------------using Microsoft.AspNetCore.Mvc;using OSharp.AspNetCore.Mvc;
using OSharp.Core;namespace CanDoo.Test.Web.Areas.Admin.Controllers
{[Area("Admin")][RoleLimit]//繼承了這個(gè),就會(huì)進(jìn)行權(quán)限檢查public abstract class AdminApiController : AreaApiController{ }}

// -----------------------------------------------------------------------
// <auto-generated>
//    此代碼由代碼生成器生成。
//    手動(dòng)更改此文件可能導(dǎo)致應(yīng)用程序出現(xiàn)意外的行為。
//    如果重新生成代碼,對(duì)此文件的任何修改都會(huì)丟失。
//    如果需要擴(kuò)展此類,請(qǐng)?jiān)诳刂破黝愋?ArticleController 進(jìn)行繼承重寫
// </auto-generated>
//
//  <copyright file="ArticleBase.generated.cs" company="杭州乾渡科技有限公司">
//      Copyright  2019 乾渡科技出品
//  </copyright>
//  <site>https://www.osharp.org</site>
//  <last-editor>atai</last-editor>
//  <last-date>2019-04-27 10:04</last-date>
// -----------------------------------------------------------------------using System;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;using OSharp.AspNetCore.Mvc;
using OSharp.AspNetCore.Mvc.Filters;
using OSharp.AspNetCore.UI;
using OSharp.Caching;
using OSharp.Core.Functions;
using OSharp.Core.Modules;
using OSharp.Data;
using OSharp.Entity;
using OSharp.Filter;
using OSharp.Secutiry;using CanDoo.Test.CMS;
using CanDoo.Test.CMS.Dtos;
using CanDoo.Test.CMS.Entities;namespace CanDoo.Test.Web.Areas.Admin.Controllers
{/// <summary>/// 管理控制器基類: 文章信息/// </summary>[ModuleInfo(Position = "CMS", PositionName = "內(nèi)容管理模塊")][Description("管理-文章信息")]public abstract class ArticleControllerBase : AdminApiController{/// <summary>/// 初始化一個(gè)<see cref="ArticleController"/>類型的新實(shí)例/// </summary>protected ArticleControllerBase(ICMSContract cMSContract,IFilterService filterService){CMSContract = cMSContract;FilterService = filterService;}/// <summary>/// 獲取或設(shè)置 數(shù)據(jù)過(guò)濾服務(wù)對(duì)象/// </summary>protected IFilterService FilterService { get; }/// <summary>/// 獲取或設(shè)置 內(nèi)容管理模塊業(yè)務(wù)契約對(duì)象/// </summary>protected ICMSContract CMSContract { get; }/// <summary>/// 讀取文章列表信息/// </summary>/// <param name="request">頁(yè)請(qǐng)求信息</param>/// <returns>文章列表分頁(yè)信息</returns>[HttpPost][ModuleInfo][Description("讀取")]public virtual PageData<ArticleOutputDto> Read(PageRequest request){Check.NotNull(request, nameof(request));Expression<Func<Article, bool>> predicate = FilterService.GetExpression<Article>(request.FilterGroup);var page = CMSContract.Articles.ToPage<Article, ArticleOutputDto>(predicate, request.PageCondition);return page.ToPageData();}/// <summary>/// 新增文章信息/// </summary>/// <param name="dtos">文章信息輸入DTO</param>/// <returns>JSON操作結(jié)果</returns>[HttpPost][ModuleInfo][DependOnFunction("Read")][ServiceFilter(typeof(UnitOfWorkAttribute))][Description("新增")]public virtual async Task<AjaxResult> Create(ArticleInputDto[] dtos){Check.NotNull(dtos, nameof(dtos));OperationResult result = await CMSContract.CreateArticles(dtos);return result.ToAjaxResult();}/// <summary>/// 更新文章信息/// </summary>/// <param name="dtos">文章信息輸入DTO</param>/// <returns>JSON操作結(jié)果</returns>[HttpPost][ModuleInfo][DependOnFunction("Read")][ServiceFilter(typeof(UnitOfWorkAttribute))][Description("更新")]public virtual async Task<AjaxResult> Update(ArticleInputDto[] dtos){Check.NotNull(dtos, nameof(dtos));OperationResult result = await CMSContract.UpdateArticles(dtos);return result.ToAjaxResult();}/// <summary>/// 刪除文章信息/// </summary>/// <param name="ids">文章信息編號(hào)</param>/// <returns>JSON操作結(jié)果</returns>[HttpPost][ModuleInfo][DependOnFunction("Read")][ServiceFilter(typeof(UnitOfWorkAttribute))][Description("刪除")]public virtual async Task<AjaxResult> Delete(int[] ids){Check.NotNull(ids, nameof(ids));OperationResult result = await CMSContract.DeleteArticles(ids);return result.ToAjaxResult();}}}

// -----------------------------------------------------------------------
// <once-generated>
//     這個(gè)文件只生成一次,再次生成不會(huì)被覆蓋。
//     可以在此類進(jìn)行繼承重寫來(lái)擴(kuò)展基類 ArticleControllerBase
// </once-generated>
//
//  <copyright file="Article.cs" company="Qiadoo">
//      隨便用
//  </copyright>
//  <site>http://www.qiadoo.com</site>
//  <last-editor>atai</last-editor>
//  <last-date>2019-04-26 13:52</last-date>
// -----------------------------------------------------------------------using System;using OSharp.Filter;using CanDoo.Test.CMS;namespace CanDoo.Test.Web.Areas.Admin.Controllers
{/// <summary>/// 管理控制器: 文章信息/// </summary>public class ArticleController : ArticleControllerBase{/// <summary>/// 初始化一個(gè)<see cref="ArticleController"/>類型的新實(shí)例/// </summary>public ArticleController(ICMSContract cMSContract,IFilterService filterService): base(cMSContract, filterService){ }}
}

轉(zhuǎn)載于:https://www.cnblogs.com/candoo/p/10782102.html

閱讀世界,共赴山海423全民讀書節(jié),邀你共讀

總結(jié)

以上是生活随笔為你收集整理的OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。