在ASP.NET5控制台应用程序中使用Startup类

六人

ASP.NET 5-beta4控制台应用程序(从VS2015中的ASP.NET Console项目模板构建)是否可以使用Startup该类来处理注册服务和设置配置详细信息?

我尝试创建一个典型的Startup类,但似乎无法通过dnx . runVisual Studio 2015或在其中运行控制台应用程序时调用它

Startup.cs 差不多:

public class Startup
{
  public Startup(IHostingEnvironment env)
  {
    Configuration configuration = new Configuration();
    configuration.AddJsonFile("config.json");
    configuration.AddJsonFile("config.{env.EnvironmentName.ToLower()}.json", optional: true);
    configuration.AddEnvironmentVariables();

    this.Configuration = configuration;
  }

  public void ConfigureServices(IServiceCollection services)
  {
    services.Configure<Settings>(Configuration.GetSubKey("Settings"));

    services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<ApplicationContext>(options => options.UseSqlServer(this.Configuration["Data:DefaultConnection:ConnectionString"]));
  }

  public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  {
    loggerFactory.AddConsole(minLevel: LogLevel.Warning);
  }
}

我试图Startup在我的Main方法中手动创建,但这似乎不是正确的解决方案,并且到目前为止还没有允许我配置服务。

我假设有某种方法可以创建一个HostingContext不会启动Web服务器但可以使控制台应用程序保持活动状态的方法。类似于以下内容:

HostingContext context = new HostingContext()
{
  ApplicationName = "AppName"
};

using (new HostingEngine().Start(context))
{
  // console code
}

但是,到目前为止,使它起作用的唯一方法是将设置HostingContext.ServerFactoryLocationMicrosoft.AspNet.Server.WebListener,这将启动Web服务器。

马特·德克莱

您正在寻找正确的主意,但我认为您需要备份一下。

首先,您可能已经注意到默认Program类不再使用静态方法了。这是因为构造函数实际上完全依赖于依赖注入!

public class Program
{
    public Program(IApplicationEnvironment env)
    {            
    }        

    public void Main(string[] args)
    {
    }
}

不幸的是,从ASP.NET 5托管环境注册的服务并不多。多亏了本文IServiceManifest您可以看到只有几种服务可用:

Microsoft.Framework.Runtime.IAssemblyLoaderContainer Microsoft.Framework.Runtime.IAssemblyLoadContextAccessor Microsoft.Framework.Runtime.IApplicationEnvironment Microsoft.Framework.Runtime.IFileMonitor Microsoft.Framework.Runtime.IFileWatcher Microsoft.Framework.Runtime.ILibraryManager Microsoft.Framework.RuntimeProvider.ICompiler .Framework.Runtime.IApplicationShutdown

这意味着您也将获得创建自己的服务提供者的乐趣,因为我们无法获得框架提供的服务提供者。

private readonly IServiceProvider serviceProvider;

public Program(IApplicationEnvironment env, IServiceManifest serviceManifest)
{
    var services = new ServiceCollection();
    ConfigureServices(services);
    serviceProvider = services.BuildServiceProvider();
}

private void ConfigureServices(IServiceCollection services)
{
}

这消除了您在标准ASP.NET 5项目中看到的许多魔力,现在您可以在中拥有想要的服务提供商Main

这里还有更多的“陷阱”,所以我不妨将它们列出来:

  • 如果要求,则为IHostingEnvironmentnull。那是因为托管环境来自ASP.Net 5托管。
  • 由于您没有其中之一,因此您将一无所有IHostingEnvironment.EnvironmentName-您需要自己从环境变量中收集数据。由于您已经将其加载到Configuration对象中,因此应该不会有问题。(它的名称是“ ASPNET_ENV”,您可以在项目设置的“调试”选项卡中添加它;默认情况下,控制台应用程序未为您设置此名称。无论如何,您可能都想重命名该名称,因为您实际上并没有不再谈论ASPNET环境。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在asp.net控制台应用程序中使用依赖项注入?

来自分类Dev

在“ asp.net 5控制台”应用程序中,“控制台”不包含“ ReadKey”的定义

来自分类Dev

从asp.net调用控制台应用程序

来自分类Dev

ASP.Net 5控制台应用程序入口点

来自分类Dev

相对路径,可在控制台应用程序和ASP.NET Web应用程序中使用

来自分类Dev

Wcf服务可在.NET Core 3.1控制台应用程序中使用,但无法在ASP.NET Core 3.1 Web API中使用

来自分类Dev

在ASP.NET 5 Beta 8控制台应用程序中,如何在没有startup.cs的情况下使用EF7并连接到SQL Server?

来自分类Dev

ASP.NET 5控制台应用程序(程序包)-如何从连接字符串创建DBContext?

来自分类Dev

为什么异步/等待在我的ASP.net 5控制台应用程序中不起作用?

来自分类Dev

AKKA.NET是在ASP.NET中还是在控制台应用程序中?

来自分类Dev

从控制台应用程序调用经典的ASP页面

来自分类Dev

出现错误:使用httpclient在asp.net控制台应用程序中发布formdata的unsupported_grant_type

来自分类Dev

如何通过桌面/控制台应用程序使用带有承载令牌的ASP.NET Web API 2.0

来自分类Dev

将数据从控制台应用程序发送到asp.net网站

来自分类Dev

ASP.NET Core中控制台应用程序和Web应用程序之间的区别

来自分类Dev

将C#控制台应用程序转换为ASP.NET MVC应用程序

来自分类Dev

如何使用ASP.NET MVC项目参考从控制台应用程序使用ASP.NET MVC的MYSQL DbContext

来自分类Dev

如何将控制台应用程序(来自asp.net 5的程序包)发布为Azure Web作业

来自分类Dev

.NET Core上的ASP.NET Core是否遵循控制台应用程序模型或IIS托管模型?

来自分类Dev

.NET Core上的ASP.NET Core是否遵循控制台应用程序模型或IIS托管模型?

来自分类Dev

是否可以在.NET Framework 4.6.1控制台应用程序上使用ASP.NET Core 2.x MVC

来自分类Dev

使用带有 EF 6 的 ASP.NET Core 控制台应用程序“创建模型时不能使用上下文”

来自分类Dev

Dllimport可在控制台应用程序中工作,但不能在ASP.NET网站中工作

来自分类Dev

无法从ASP.NET连接到AX Web服务,但可以从控制台应用程序连接

来自分类Dev

如何在ASP.NET Core 1.0中显示Web应用程序的LoggerFactory日志控制台?

来自分类Dev

显示来自 ASP.NET Core 应用程序的 docker 日志控制台的跟踪和调试消息

来自分类Dev

HttpWebRequest/HttpWebResponse 仅适用于控制台应用程序而不适用于 ASP.NET

来自分类Dev

如何在Web应用程序ASP.net MVC中嵌入C#.net控制台应用程序

来自分类Dev

代码在控制台应用程序上有效,但在ASP.NET应用程序上无效

Related 相关文章

  1. 1

    如何在asp.net控制台应用程序中使用依赖项注入?

  2. 2

    在“ asp.net 5控制台”应用程序中,“控制台”不包含“ ReadKey”的定义

  3. 3

    从asp.net调用控制台应用程序

  4. 4

    ASP.Net 5控制台应用程序入口点

  5. 5

    相对路径,可在控制台应用程序和ASP.NET Web应用程序中使用

  6. 6

    Wcf服务可在.NET Core 3.1控制台应用程序中使用,但无法在ASP.NET Core 3.1 Web API中使用

  7. 7

    在ASP.NET 5 Beta 8控制台应用程序中,如何在没有startup.cs的情况下使用EF7并连接到SQL Server?

  8. 8

    ASP.NET 5控制台应用程序(程序包)-如何从连接字符串创建DBContext?

  9. 9

    为什么异步/等待在我的ASP.net 5控制台应用程序中不起作用?

  10. 10

    AKKA.NET是在ASP.NET中还是在控制台应用程序中?

  11. 11

    从控制台应用程序调用经典的ASP页面

  12. 12

    出现错误:使用httpclient在asp.net控制台应用程序中发布formdata的unsupported_grant_type

  13. 13

    如何通过桌面/控制台应用程序使用带有承载令牌的ASP.NET Web API 2.0

  14. 14

    将数据从控制台应用程序发送到asp.net网站

  15. 15

    ASP.NET Core中控制台应用程序和Web应用程序之间的区别

  16. 16

    将C#控制台应用程序转换为ASP.NET MVC应用程序

  17. 17

    如何使用ASP.NET MVC项目参考从控制台应用程序使用ASP.NET MVC的MYSQL DbContext

  18. 18

    如何将控制台应用程序(来自asp.net 5的程序包)发布为Azure Web作业

  19. 19

    .NET Core上的ASP.NET Core是否遵循控制台应用程序模型或IIS托管模型?

  20. 20

    .NET Core上的ASP.NET Core是否遵循控制台应用程序模型或IIS托管模型?

  21. 21

    是否可以在.NET Framework 4.6.1控制台应用程序上使用ASP.NET Core 2.x MVC

  22. 22

    使用带有 EF 6 的 ASP.NET Core 控制台应用程序“创建模型时不能使用上下文”

  23. 23

    Dllimport可在控制台应用程序中工作,但不能在ASP.NET网站中工作

  24. 24

    无法从ASP.NET连接到AX Web服务,但可以从控制台应用程序连接

  25. 25

    如何在ASP.NET Core 1.0中显示Web应用程序的LoggerFactory日志控制台?

  26. 26

    显示来自 ASP.NET Core 应用程序的 docker 日志控制台的跟踪和调试消息

  27. 27

    HttpWebRequest/HttpWebResponse 仅适用于控制台应用程序而不适用于 ASP.NET

  28. 28

    如何在Web应用程序ASP.net MVC中嵌入C#.net控制台应用程序

  29. 29

    代码在控制台应用程序上有效,但在ASP.NET应用程序上无效

热门标签

归档