日韩性视频-久久久蜜桃-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源码的全部內容,希望文章能夠幫你解決所遇到的問題。

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