我试图弄清楚如何使用主机构建器模式来运行控制台应用程序(而不是 Windows 服务)。目的是保持流程与 WebApi 相似,以保持开发实践相似。我见过使用 HostedService 或 BackGroundService 的示例,他们希望将其作为 Windows 服务运行。但是,如果我想运行一个简单的控制台应用程序,我在哪里指定我的入口点类和方法?从 hostbuilder.Build() 中,我可以看到 Run() 和 RunAsync() 方法。但我无法弄清楚它会执行什么?
我已经看到了其他示例,您可以在其中创建 servicecollection,然后使用 serviceprovider.GetService().SomeMethod() 来启动该过程。但这有点偏离我们想要做的事情。所以请建议如何指定启动过程。我们正在使用 3.1 .Net Core。
class Program
{
static async void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
await host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostBuilderContext, serviceCollection) => new Startup(hostBuilderContext.Configuration).ConfigureServices(serviceCollection))
.UseSerilog()
;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用SQL Server 2008.我有表有重复索引(基本上索引具有相同的定义).我想知道是否有可能找出哪些查询正在使用这些索引?我不知道为什么首先创建重复索引.因此,在删除它们之前,我想识别使用它们的任何查询.
还有一个问题是,在上述情况下,SQL Server引擎如何确定使用哪个索引?这会对性能产生什么影响?
谢谢aski
我正在尝试使用NEST 5.x预发布版本为Elasticsearch 5.x创建索引.我有来自2.x的示例,它显示了如何使用ElasticClient.CreateIndex方法创建索引.以下是我的示例代码.
ESnode = new Uri("http://localhost:9200");
Nodesettings = new ConnectionSettings(ESnode);
Client = new ElasticClient(Nodesettings);
Run Code Online (Sandbox Code Playgroud)
但是,当我在下面输入时,没有可用的自动填充功能.
Client.CreateIndex( c => c.
Run Code Online (Sandbox Code Playgroud)
我能够使用下面的代码成功获得节点的健康状况.
var res = Client.ClusterHealth();
Console.WriteLine("Status:" + res.Status);
Run Code Online (Sandbox Code Playgroud)
我有一个复杂的文档映射,我已经定义了类结构并打算使用Automap方法.因此,我试图以编程方式创建索引,以避免手动创建索引.
我尝试使用一些非常旧版本的NEST(1.x),我能够获得createIndex的自动完成功能.但是v2.4x和5.x都没有提供自动完成功能.有没有新的方法来创建索引?请告诉我.
谢谢
我正在使用 ASP.Net Core 3.1 Web API。当我调用控制器操作方法时,我需要在后台执行额外的活动,而不需要在当前操作的处理中添加太多延迟。我正在执行的其他活动是将一些数据准备到缓存中,以便在用户执行下一步之前可用。所以我想简单地触发该活动,而不等待它完成。但同时,我不希望任务在没有完成的情况下被处置,只是因为操作方法完成了它的处理,将响应返回给调用者并且瞬态控制器被处置。
所以我计划使用注入控制器的单例服务来执行任务。但任务本身可能涉及需要使用临时服务。因此,我不是直接将瞬态服务注入到 Singleton Service 中,而是考虑将瞬态服务注入到 Controller 中。然后在操作方法中,我将瞬态服务作为参数传递给单例服务上的异步方法,然后在该方法中调用所需的服务。
public IActionResult GetSomething(string input1)
{
var resp = await _transientService1.GetSomethingElse(input1);
// I am not awaiting this task
var backgroundTask = _singletonService1.DoSomethingAsync(_transientService2, resp.someattr);
return Ok(resp);
}
Run Code Online (Sandbox Code Playgroud)
现在在单例服务中,我将获取所需的数据并将其写入缓存。
public async Task DoSomethingAsync(ITransientService2 myTransientService2, string someParam)
{
var temp1 = await myTransientService2.GetSomethingNew(someParam);
var temp2 = await _SingletonService2.WriteCache(temp1);
}
Run Code Online (Sandbox Code Playgroud)
所以我首先想知道这种方法是否有效。如果它有效,我需要注意哪些陷阱或陷阱。
目前,这都是概念性的。否则我会直接尝试一下:)因此出现了问题。
c# dependency-injection asp.net-web-api asp.net-core asp.net-core-3.1