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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阅读nopcommerce startup源码

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阅读nopcommerce startup源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
創建一個asp.net?core項目,可以到到startup類有兩個方法
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

ConfigureServices方法:注冊服務到容器中,在整個應用中都可以使用。推薦:自定義方法以Add開頭 Configure方法:為應用配置請求管道.推薦:自定義方法以Use開頭

這里并不會深入的探討依賴注入和IApplicationBuilder、IServiceCollection這些核心對象,這篇文章主要目的是快速的了解startup類和如何利用一些開源的項目(nopcommerce)去使用它。

nopcommerce是個優秀的開源的電商項目,應該都不會陌生,不管有沒有項目中用到,但不妨礙我們去閱讀學習他們優秀的地方。

一起先了解下項目結構?

  • Nop.Core 核心層 :包含領域模型、和基礎設施層(緩存、倉儲接口、依賴注入、對象映射mapper等)、一些其他工具里的封裝

  • Nop.Data 數據層:orm與數據庫的一些操作,倉儲實現類,領域和表的映射等

  • Nop.Services 應用服務層:業務服務操作

  • Plugins 插件:nop 是插件式開發 ,擴展起來很是方便

  • Nop.Web?表現層:ui交互

  • Nop.Web.Framework:對asp.netcore mvc 進行一些擴展和封裝

在回到今天的主角startup類 我進入Nop.Web項目 打開startup類

public class Startup
{
#region Fields

private readonly IConfiguration _configuration;
private readonly IHostingEnvironment _hostingEnvironment;

#endregion

#region Ctor

public Startup(IConfiguration configuration, IHostingEnvironment hostingEnvironment)
{
_configuration = configuration;
_hostingEnvironment = hostingEnvironment;
}

#endregion

是不是很簡潔,可以發現nop對IServiceCollection、IApplicationBuilder進行擴展了兩個方法類 分別ServiceCollectionExtensions、ApplicationBuilderExtensions,下面我們分別快速的瀏覽這兩個類的源碼

我們F12進入ConfigureApplicationServices的實現方式一步一步的查看

var engine = EngineContext.Create(); protected virtual IServiceProvider RegisterDependencies(IServiceCollection services, ITypeFinder typeFinder)
{
var containerBuilder = new ContainerBuilder();

F12進入ConfigureRequestPipeline

EngineContext.Current.ConfigureRequestPipeline(application);
public void ConfigureRequestPipeline(IApplicationBuilder application)
{

到此這兩個文件的源碼已經過完了,覺得很核心的幾個對象

  • EngineContext:NopEngine的實例上下文 作用 獲取創建和獲取NopEngine的實例上下文的實例(涉及到的設計模式單例)

  • IEngine、NopEngine:nop引擎還是很體貼的,里面封裝了使用的方法如ioc 解析方法Resolve

  • INopStartup :在應用程序啟動時配置服務和中間件 當時我看過源碼,有幾處還是很巧妙的,下面我整理下,多個為什么,帶著問題去看,印象更深刻,也達到了參考nop源碼學習startup類的目的。

  • 接口INopStartup作用?INopStartup有兩個方法ConfigureServices,Configure 跟Startup方法作用都是一樣的,nop把它抽離成接口的好處,可以很方便通過反射把實現INopStartup的類查找出來,然后掉用ConfigureServices,Configure方法


  • var typeFinder = new WebAppTypeFinder();
    var startupConfigurations = typeFinder.FindClassesOfType<INopStartup>();


    var instances = startupConfigurations
    .Select(startup => (INopStartup)Activator.CreateInstance(startup))
    .OrderBy(startup => startup.Order);


    foreach (var instance in instances)
    instance.ConfigureServices(services, configuration);


    foreach (var instance in instances)
    instance.Configure(application);
  • nop使用Autofac作為注入框架,它是如何實現的

  • var containerBuilder = new ContainerBuilder();
  • 接口IEngine的作用?配置startup 服務和請求管道、autofac注冊和解析

  • IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration);
    void ConfigureRequestPipeline(IApplicationBuilder application);
    T Resolve<T>() where T : class;
  • 如何使用注入的服務?

  • 1.我們在Nop.Services項目中添加ProductService和ProductAttributeService兩個業務服務

    public class ProductService : IProductService
    {
    public string GetProductById(int productId)
    {
    return "獲取產品";
    }
    }

    public class ProductAttributeService: IProductAttributeService
    {
    public string GetProductAttributeById(int productAttributeId)
    {
    return "獲取產品屬性";
    }
    }

    2.我們實現IDependencyRegistrar依賴注冊接口

    public class DependencyRegistrar : IDependencyRegistrar
    {

    3.然后在homecontroller中測試,第一種構造函數注入,第二種直接使用IEngine的實例解析

    #region fileds
    private readonly IProductService productService;
    #endregion
    public HomeController(IProductService productService)
    {
    this.productService = productService;
    }
    public IActionResult Index()
    {

    然后運行查看效果

    解析成功,展示的只是本分代碼,實例代碼上傳到github上,喜歡的可以clone下來,自己調試調試,稍微調整下,放心用在自己的項目中,因為nop已經比較成熟了。

    原文:https://www.cnblogs.com/chengtian/p/11265175.html


    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?


    總結

    以上是生活随笔為你收集整理的阅读nopcommerce startup源码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲三区在线 | 欧美激情免费在线 | www.色日本 | 少妇一级淫片免费看 | 中国一级特黄毛片大片 | 动漫一区二区三区 | 香蕉91视频 | 一区二区精品免费 | 直接看av的网站 | 欧美性猛交xxxx乱大交退制版 | 婷婷国产一区二区三区 | 91av导航| 婷婷调教口舌奴ⅴk | 久草观看视频 | 亚洲一区av | 日韩精品一区二区三 | 久久久久久国产精品 | 香蕉视频亚洲一级 | 欧美成人免费一级人片100 | 狠狠干夜夜干 | 国产精品九九九 | 无码内射中文字幕岛国片 | 最新超碰| 黄色三级在线播放 | 男女男精品网站 | 亚洲另类在线观看 | 人人干人人玩 | 韩国女主播一区二区 | 四虎婷婷 | 一区二区不卡视频在线观看 | 亚洲性少妇 | 午夜影院试看 | www伊人网| 手机在线看a | 涩涩视频在线观看免费 | 嫦娥性艳史bd | 黄色一二三区 | 国产精品1区2区3区 在线看黄的网站 | 九九热精品视频在线播放 | 另类小说av | 91碰在线视频 | 97国产成人无码精品久久久 | 少妇媚药按摩中文字幕 | 拔插拔插华人 | 亚洲欧美另类视频 | 亚洲av无码一区二区乱子伦as | 玖玖热在线视频 | 二男一女一级一片 | 老女人丨91丨九色 | 动漫av在线免费观看 | av片免费播放 | 欧美日韩亚洲二区 | 高清国产一区二区三区 | 久久网站免费 | 91超薄丝袜肉丝一区二区 | 麻豆69| 中文字幕精品久久久久人妻红杏1 | 国产日本精品视频 | 国产淫片av片久久久久久 | 男女黄色网 | 91夫妻论坛| 乱亲女h秽乱长久久久 | 无码人妻一区二区三区免费n鬼沢 | 国产天堂网 | 影音先锋久久 | 老司机久久精品视频 | 夫妻自拍偷拍 | 午夜伊人网 | av日日夜夜 | 涩涩网站在线观看 | 黄色在线观看视频 | 99久久精品免费看国产 | 精品久久久久久国产 | 欧美黄色网 | 亚洲天堂网一区二区 | 日韩区在线 | 欧洲久久久久久 | 中文字幕久久一区 | 91av福利 | 欧美一区三区二区在线观看 | 黄色aaaaa| 激情av中文字幕 | 激情爱爱网 | 一级肉体全黄毛片 | 久久精品欧美一区二区 | 国产乱真实合集 | 亚洲精品国产精品乱码不66 | 97人人爽人人爽人人爽人人爽 | 亚洲精品高清无码视频 | 亚洲人视频在线 | 成人av电影天堂 | 好男人影视www | 国产永久视频 | 狂躁美女大bbbbbb黑人 | 壮汉被书生c到合不拢腿 | 激情久久网站 | 黄色片免费的 | 亚洲av无码一区二区三区网站 | 成人xxxx|