首页 > 解决方案 > 为 ASP.NET 核心和 .NET 核心 CLT 配置服务

问题描述

我想使用相同的代码并希望配置为 ASP.NET 核心和 .net 核心命令行工具设置 DI。

我了解如何使用 Startup.cs 为 ASP.NET 核心配置服务。我了解如何ServiceCollection在命令行工具中构建一个服务收集和构造函数注入)。

我的 Web 和 CLT 项目可以使用相同的扩展方法来注册我的服务吗?Startup.ConfigureServices会将ServiceCollection它收到的 and 配置传递给我的扩展方法。我可以传递ServiceCollectionCLT 管理的 CLT,但它可以从appsettings.json文件中获取相同类型的配置吗?

标签: c#asp.net.netasp.net-coredependency-injection

解决方案


在 CLT 中,我需要一些掘金:

Microsoft.Extensions.Cofiguration.Json
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting

private static ServiceCollection _services = new ServiceCollection();

    public static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
//TODO:                .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
        builder.Build();
        IConfigurationBuilder configBuilder =
            new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
        ServiceProvider provider = ConfigureServices(_services, configBuilder.Build()).BuildServiceProvider(); //TODO: dispose
        _repo = provider.GetService<IRepository>();
        provider.Dispose();

我可能会将 CLT 的一个属性设置为提供者,但是我不确定如何确保它被处置。


推荐阅读