Xunit.DependencyInjection 7.0 <公【布】「了」>
Intro
上次我们已经先容过一次大师《的》 Xunit.DependencyInjection
https://www.cnblogs.com/weihanli/p/xuint-dependency-injection.html ,最近大师完成「了」 7.0 《的》重构而且已经正式公【布】,已经可以直接安装使用「了」
7.0 为我们带来「了」更好《的》编“程体验”,在 6.x 《的》版本 中[,(我们《的》) Startup
需要继续于 DependencyInjectionTestFramework
【而且】需要设置一个 assembly attribute,这在 7.0 中[都不需要「了」,下面我们来看看有「了」哪些转变
Startup 〖《的》转变〗
首先来看大师给出《的》 diff
-[assembly: TestFramework("Your.Test.Project.Startup", "Your.Test.Project")]
namespace Your.Test.Project
{
- public class Startup : DependencyInjectionTestFramework
+ public class Startup
{
- public Startup(IMessageSink messageSink) : base(messageSink) { }
- protected void ConfigureServices(IServiceCollection services)
+ public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IDependency, DependencyClass>();
}
- 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 core Startup
《的》使用习惯,可以屏蔽掉许多实现细〖节〗,‘用户只需’要在 Startup
‘注’册自己《的》逻辑即可,更为专注于自己《的》逻辑而无需体贴框架所做《的》事情
新《的》 Startup 剖析
我把上一篇文章写《的》示例用升级到「了」新《的》版本,下面是更新后《的》示例代码
namespace XUnitDependencyInjectionSample
{
public class Startup
{
// 自界说 HostBuilder ,可以没有这个<方式>,没有这个<方式>会使用默认《的》 hostBuilder,【通常直接使用】 `ConfigureHost` 应该就够用「了」
// public IHostBuilder CreateHostBuilder()
// {
// return new HostBuilder()
// .ConfigureAppConfiguration(builder =>
// {
// // ‘注’册设置[
// builder
// .AddInMemoryCollection(new Dictionary<string, string>()
// {
// {"UserName", "Alice"}
// })
// .AddJsonFile("appsettings.json")
// ;
// })
// .ConfigureServices((context, services) =>
// {
// // ‘‘注’册自界说’服务
// services.AddSingleton<IIdGenerator, GuidIdGenerator>();
// if (context.Configuration.GetAppSetting<bool>("XxxEnabled"))
// {
// services.AddSingleton<IUserIdProvider, EnvironmentUserIdProvider>();
// }
// })
// ;
// }
// 自界说 host 构建
public void ConfigureHost(IHostBuilder hostBuilder)
{
hostBuilder
.ConfigureAppConfiguration(builder =>
{
// ‘注’册设置[
builder
.AddInMemoryCollection(new Dictionary<string, string>()
{
{"UserName", "Alice"}
})
.AddJsonFile("appsettings.json")
;
})
.ConfigureServices((context, services) =>
{
// ‘‘注’册自界说’服务
services.AddSingleton<IIdGenerator, GuidIdGenerator>();
if (context.Configuration.GetAppSetting<bool>("XxxEnabled"))
{
services.AddSingleton<IUserIdProvider, EnvironmentUserIdProvider>();
}
})
;
}
// 支持《的》形式:
// ConfigureServices(IServiceCollection services)
// ConfigureServices(IServiceCollection services, HostBuilderContext hostBuilderContext)
// ConfigureServices(HostBuilderContext hostBuilderContext, IServiceCollection services)
public void ConfigureServices(IServiceCollection services, HostBuilderContext hostBuilderContext)
{
services.TryAddSingleton<CustomService>();
}
// 可以添加要用到《的》<方式>『参数』,会自动从‘注’册《的》“服”务 中[获取服务实例,类似于 asp.net core 里 Configure <方式>
public void Configure(IServiceProvider applicationServices, IIdGenerator idGenerator)
{
// 〖有一些测试〗数据要初始化可以放在这里
// InitData();
}
}
}
在新《的》版本 中[ 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 《的》寻找<方式>
默认《的》 Startup
通常是 ProjectName.Startup
,通常在项目根目录下建立一个 Startup
是不需要设置《的》,若是不是或不起作用,‘可以参’考下面 Startup 《的》寻找规则
若是要使用一个稀奇《的》 Startup
, 《你可以通过》在项目文件《的》 PropertyGroup
部门界说 XunitStartupAssembly
和[ XunitStartupFullName
,详细规则如下
<Project>
<PropertyGroup>
<XunitStartupAssembly>Abc</XunitStartupAssembly>
<XunitStartupFullName>Xyz</XunitStartupFullName>
</PropertyGroup>
</Project>
XunitStartupAssembly | XunitStartupFullName | Startup |
---|---|---|
Your.Test.Project.Startup, Your.Test.Project | ||
Abc | Abc.Startup, Abc | |
Xyz | Xyz, Your.Test.Project | |
Abc | Xyz | Xyz, Abc |
More
除「了」上面《的》 Startup
《的》改动之外,新版本还支持「了」 xunit 中[ fixture 《的》依赖注入,似乎是由一个外国小哥提《的》 PR, 详见:https://github.com/pengweiqhca/Xunit.DependencyInjection/pull/21
有「了」这个神器,在测试代码 中[使用依赖注入要利便许多「了」,还没有用起来《的》可以准备上手「了」~~
Reference
- https://github.com/pengweiqhca/Xunit.DependencyInjection
- https://github.com/WeihanLi/SamplesInPractice/tree/master/XUnitDependencyInjectionSample
Allbet Gaming声明:该文看法仅代表作者自己,与阳光在线无关。转载请注明:allbet<网址>:更优雅的在 Xunit 中使用依赖注入欢迎进入欧博亚洲电脑版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团《的》官方网站。欧博官网开放Allbet‘注’册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。
Us apple developer accounts for saleAppledeveloper.io is a reputed website selling apple developer account, providing us, China and worldwide developer individual accounts for sale. It's at low price and good quality. Always provides satisfying services!已入坑,出不来了
欧博亚洲欢迎进入欧博亚洲(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。水一下,我在看
欧博亚洲欢迎进入欧博亚洲(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。水一下,我在看
欧博APP下载来晚了,先留名
欧博开户网址欢迎进入欧博开户网址(Allbet Gaming):www.aLLbetgame.us,欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。先占坑等会看。
欧霸杯小组赛周五破晓将上演最后一轮赛事,飞燕诺及阿尔克马尔仍要为出线席位而起劲,两队对手禾夫斯贝加及列积卡实力均属一样平常,这对荷甲“一丘之貉”有望搭上尾班车跻身淘汰赛。 老粉手动点赞
At 5pm, the 30-stock index tumbled 17.07 points, or 1.13% to 1,487.37, its lowest in about three weeks.下次早点来