如何将数据传递到startup.cs?
这是用于集成测试使用WebHostBuilder
and TestServer
我需要根据测试夹具传递不同的数据。因此,例如,不想从配置文件中提取它
数据将提供给startup.cs中注册的中间件
文档似乎表明这应该有效:
var configBuilder = new ConfigurationBuilder()
.AddInMemoryCollection(new[]
{
new KeyValuePair<string, string>("key", "value"),
});
var configuration = configBuilder.Build();
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseConfiguration(configuration) // config added here
.UseStartup<Startup>()
.Build();
host.Run();
但是当我检查startup.cs中的Configuration对象时,密钥不存在。并且只有startup.cs中定义的提供者可用。
我目前正在尝试在program.cs中执行此操作来测试这个概念,然后稍后将进行集成测试
有什么想法我做错了吗?
有没有更好的方法将数据传递到启动中?
将数据发送到的一种方法Startup
将是注册一个服务Main
. WebHostBuilder
has ConfigureServices
可以使用的方法就像ConfigureServices
您可以在中实现的方法Startup
class.
例如,您可以创建一个带有静态变量的类(不是最好的主意,但可行)
public class DataContainer
{
public static string Test;
}
然后设置其值并将其添加为单例服务
DataContainer.Test = "testing";
var host = new WebHostBuilder()
.ConfigureServices(s => { s.AddSingleton(typeof(DataContainer)); })
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseConfiguration(configuration) // config added here
.UseStartup<Startup>()
.Build();
在此之后你的Startup
可以使用常规的注入方式来得到这个
public Startup(IHostingEnvironment env, DataContainer data)
{
// data.Test is available here and has the value that has been set in Main
}
注入当然适用于此后的任何类和方法,而不仅仅是构造函数。
我不确定这是否比实际创建一个具有静态值的类更好,但如果需要更改该类,有时可以将其制作成接口和其他常见的注入好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)