更優雅的在 Xunit 中使用依賴注入

2022-01-10 05:53:39 字數 3472 閱讀 8878

上次我們已經介紹過一次大師的xunit.dependencyinjection,最近大師完成了 7.0 的重構並且已經正式發布,已經可以直接安裝使用了

7.0 為我們帶來了更好的程式設計體驗,在 6.x 的版本中,我們的startup需要繼承於dependencyinjectiontestframework而且需要設定乙個 assembly attribute,這在 7.0 中都不需要了,下面我們來看看有了哪些變化

首先來看大師給出的 diff

-[assembly: testframework("your.test.project.startup", "your.test.project")]

namespace your.test.project

- protected void configureservices(iservicecollection services)

+ public void configureservices(iservicecollection services)

- protected override ihostbuilder createhostbuilder() =>

- base.createhostbuilder(assemblyname)

- .configureservices(configureservices);

- protected override void configure(iserviceprovider provider)

+ public void configure(iserviceprovider provider)

}}

移除了testframeworkassembly attribute

不再需要繼承於dependencyinjectiontestframework

也因為上面的不需要繼承,所以原本要override的方法可以不override了,原來是protected的方法現在需要改成public

這樣改了之後首先我們在使用的時候無需知道dependencyinjectiontestframework的存在了,而且可以更符合 asp.net corestartup的使用習慣,可以遮蔽掉很多實現細節,使用者只需要在startup註冊自己的邏輯即可,更為專注於自己的邏輯而無需關心框架所做的事情

namespace xunitdependencyinjectionsample

// })

// ;

// })

// .configureservices((context, services) =>

//

// })

// ;

// }

// 自定義 host 構建

public void configurehost(ihostbuilder hostbuilder)});

}).configureservices((context, services) =>});

}// 支援的形式:

// configureservices(iservicecollection services)

// configureservices(iservicecollection services, hostbuildercontext hostbuildercontext)

// configureservices(hostbuildercontext hostbuildercontext, iservicecollection services)

public void configureservices(iservicecollection services, hostbuildercontext hostbuildercontext)

// 可以新增要用到的方法引數,會自動從註冊的服務中獲取服務例項,類似於 asp.net core 裡 configure 方法

}}

在新的版本中startup和 asp.net core 裡的startup更加相像了,

會多乙個createhostbuilder/configurehost(ihostbuilder)的方法,允許使用者自定義 host 的構建,也可以沒有這個方法

configureservices方法允許使用者增加hostbuildercontext作為引數,可以通過hostbuildercontext來獲取配置資訊,也可以在createhostbuilder/configurehost(ihostbuilder)裡註冊也是一樣的

註冊配置/服務和 asp.net core 裡一模一樣,有資料或配置需要在專案啟動時初始化的,可以放在configure方法做,有點類似於 asp.net core 裡startup中的configure方法,可以將需要的服務作為方法引數,執行時會自動從註冊的服務中獲取

預設的startup通常是projectname.startup,通常在專案根目錄下建立乙個startup是不需要配置的,如果不是或不起作用,可以參考下面 startup 的尋找規則

如果要使用乙個特別的startup, 你可以通過在專案檔案的propertygroup部分定義xunitstartupassemblyxunitstartupfullname,具體規則如下

abc

xyz

xunitstartupassembly

xunitstartupfullname

startup

your.test.project.startup, your.test.project

abcabc.startup, abc

xyzxyz, your.test.project

abcxyz

xyz, abc

除了上面的startup的改動之外,新版本還支援了 xunit 中 fixture 的依賴注入,似乎是由乙個外國小哥提的 pr, 詳見:

有了這個神器,在測試**中使用依賴注入要方便很多了,還沒有用起來的可以準備上手了~~

在 Xunit 中使用依賴注入

今天介紹乙個基於xunit和微軟依賴注入框架的 真正 的依賴注入使用方式 xunit.dependencyinjection,來自大師的作品,讓你在測試 裡使用依賴注入像 asp.net core 一樣輕鬆 在 xunit 測試專案裡新增對xunit.dependencyinjection的引用 d...

依賴注入有點 在 Xunit 中使用依賴注入

今天介紹乙個基於xunit和微軟依賴注入框架的 真正 的依賴注入使用方式 xunit.dependencyinjection,來自大師的作品,讓你在測試 裡使用依賴注入像 asp.net core 一樣輕鬆 在 xunit 測試專案裡新增對xunit.dependencyinjection的引用 d...

在C 中使用依賴注入

依賴注入 dependency injection,縮寫為di 是一種實現 inversion of control,縮寫為ioc 的方法。在編寫c 時,使用這種方法能夠解決一些場景的需求。本系列將通過若干個實際問題,向讀者介紹如何在c 中使用依賴注入。本系列文章將基於以下基本的軟體執行環境 專案內...