.Net Core配置为不同版本启动

时间:2018-06-09 23:17:42

标签: c# build .net-core

我正在尝试找出一种有效的方法来为不同的构建配置我的services.AddAuthentication(options => { options.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme; }).AddIdentityServerAuthentication(AuthenticationRule.ConfigureForStaging()); //.AddIdentityServerAuthentication(AuthenticationRule.ConfigureForProduction()); 而不使用大量令人讨厌的IfDefs。如果我要配置一个普通的类,我通常只会在Dependency Injector中交换一个组件,一切都会完成,但由于启动类用于配置DI,这是不可能的。

目前,我很难对以下内容进行编码:

const string connection = @"Server=StagingServer.com;Database=MyStagingDB;Trusted_Connection=True;";
//const string connection = @"Server=localhost;Database=MyLocalDB;Trusted_Connection=True;";

我有一堆语句注释掉代码库的吞吐量

def on_press(key):
    global line
    line += key
    print(line)

这不是非常有效,并且肯定容易出错。如何配置我的启动类以使切换构建变得容易?

1 个答案:

答案 0 :(得分:3)

这是一个想法。

public class Program
{
    public static bool IsProduction = false; // shouldn't actually be hard coded.

    public static void Main(string[] args)
    {
        var hostCommon =
            new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration();

        var host =
            IsProduction
                ? hostCommon.UseStartup<StartupProduction>()
                : hostCommon.UseStartup<StartupStaging>();

        host.Build().Run();
    }
}

然后,您可以将公共部分放在某种Helper类中,并从每个Startup类中调用每个Startup类所需的任何部分。

如果您有两个以上的环境,则可以使用Dictionary<string, Type>Dictionary<string, Func<IWebHostBuilder, IWebHostBuilder>>并键入环境名称。

或者,您可以使用Camilo Terevinto提到的基于会议的方法。 From Microsoft

  

注入IHostingEnvironment的另一种方法是使用a   基于惯例的方法。该应用可以定义单独的启动   不同环境的类(例如,StartupDevelopment),   并在运行时选择适当的启动类。班级   其名称后缀与当前环境匹配的优先级。如果   该应用程序在开发环境中运行,并包含一个   Startup类和StartupDevelopment类,StartupDevelopment   使用了类。