.NET 整合測試 nUnit

這次主要的出發點是測試從原本自己刻的http client換成refit來讓程式碼更簡潔

那就必須確保資料最後都一致

可能會有的問題例如datetime的轉換

那一開始我就重新從config取設定然後注入用

RestService.For<IGitHubApi>()

這樣的方式注入,然後用字串取得Interface

但是這樣重新注入就測不到本身設定有沒有問題,因為重新刻了

繼續閱讀 “.NET 整合測試 nUnit"

dotnet Quartz 排程工作

在找如何在後端自動排程的時候 最簡單的就是IScheduler

多找幾篇之後有幾個選項 但其實就是主要看到的文件 跟 文章都偏向quartz 就直接用了

主要參考這一篇:https://dotblogs.com.tw/wasichris/2020/12/16/172524

官方文件:https://www.quartz-scheduler.net/

基本上的架構就是 scheduler & job

開job做為要做的工作注入

自動排程

他可以設定簡單的定時/定點、日曆等等

那我選用cronexpression來讓我決那些分鐘跑一次

切換頻率

因為更改一開始注入的job不可能,因為是用cronexpression注入singelton

所以我改為兩種不同頻率的job 一個預設暫停

我在這邊有改寫scheduler 增加一個叫做 run on start

在Task StartAsync裡面linq的時候增加run on start = true

然後就分別暫停/開啟相互切換job

不過遇到的問題就是切換的時候兩個都執行了 不過目前影響不大就先這樣

自己架設Nuget server

如果遇到通用套件,自己內部使用又不想放到外面,除了使用dll傳送檔案之外,自己架設一個nuget server就是可以使用的選項

那在看microsoft自己的官方nuget server的時候,發現是dotnet framework,github的星星數量也才幾百,多找了幾個之後,選用Baget Server

原本的nuget server的問題就是會遇到core NET 5 6等 target framework的時候就會跑不出來

https://loic-sharma.github.io/BaGet/

在我測試Baget的時候都沒有遇到問題

不過需要再研究是 他接到database做搜尋的方式

那目前有做出來的就是

針對不同的framework

  <PropertyGroup>
    <TargetFrameworks>
		netstandard2.1;
		netcoreapp2.1;
		netcoreapp2.2;
		netcoreapp3.0;
		netcoreapp3.1;
		net5.0;
		net6.0;
	</TargetFrameworks>
    <Version>1.1.1</Version>
  </PropertyGroup>

在不同的framework用不同的dependency

<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">
    <Reference Include="System.Net" />
    <PackageReference Include="Newtonsoft.Json" Version="6.0.5" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net5.0' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
    <PackageReference Include="Newtonsoft.Json" Version="8.0.3" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>

在不同framework做不同的事情

        public static string version()
        {
#if NET5_0
            return "5.0";
#elif NET6_0
            return "6";
#elif NETCOREAPP2_1
            return "21";
#else
            return "else";
#endif
        }

AspNet 新增user/role表格

在用了預設的 identity之後 就會要加欄位了

原本的用法是有userstore/ usermanager rolestore rolemanager

以下是已經改好之後的設定

        private UserStore<ApplicationUser> userStore;
        private UserManager<ApplicationUser> userManager;
        private RoleStore<ApplicationRole> roleStore;
        private RoleManager<ApplicationRole> roleManager;

            userStore = new UserStore<ApplicationUser>(applicationDbContext);
            userManager = new UserManager<ApplicationUser>(userStore);
            userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false };
            roleStore = new RoleStore<ApplicationRole>(applicationDbContext);
            roleManager = new RoleManager<ApplicationRole>(roleStore);
繼續閱讀 “AspNet 新增user/role表格"