【发布时间】:2021-05-14 07:12:58
【问题描述】:
我确定不是第一个遇到这种情况的人,但我找不到任何好的示例模式。在使用 .Net Core 3 和更新版本并创建 Web 应用程序时,我们可以使用 Startup 类
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Startup 类的一个很好的特性是它首先调用 ConfigureServices,我们可以在其中将东西添加到依赖注入容器中,然后调用支持依赖注入的 Configure 方法(我们可以向该方法添加参数以获取那些实例在 ConfigureServices 中向容器注册的类)。
这很好,因为它允许我们进行仅在实例化后可用的设置和初始化调用,并且如果被实例化的类具有一系列依赖关系,则可以节省大量代码。 Configure 方法允许基础架构链接那些我们必须在 ConfigureServices 方法中自己完成的依赖项。
在构建控制台应用程序时,我们没有 Startup 类的选项。我们直接调用ConfigureServices。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
...
})
哪里有一个干净的地方来做通常会考虑放在 Startup.Configure 方法中的工作?我对在托管服务启动之前放置您想要发生的事情特别感兴趣(例如,我有一个类响应需要连接订阅的数据库更改,我希望这发生在任何托管服务启动之前可能更改数据库)。所以换句话说,我正在寻找在托管服务启动之前利用依赖注入的机会。
【问题讨论】:
-
@KirkLarkin 扩展方法看起来很干净。我认为这是我将采用的模式。谢谢。
标签: c# asp.net-core .net-core