上次我們已經介紹過一次大師的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)
}}
移除了testframework
assembly 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
部分定義xunitstartupassembly
和xunitstartupfullname
,具體規則如下
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 中使用依賴注入。本系列文章將基於以下基本的軟體執行環境 專案內...