小编Dun*_*mon的帖子

当 ASP.NET Core 应用程序关闭时,如何正确安全地处理在容器中注册的单例实例

我正在寻找有关如何在我的 ASP.NET Core 2.0 应用程序关闭时正确安全地处理已注册的单例实例的指导。

根据以下文档,如果我注册一个单例实例(通过 IServiceCollection),容器将永远不会尝试创建一个实例(它也不会处理该实例),因此当应用程序关闭时,我只能自己处理这些实例.

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.0(2.1有相同的指导)

我附上了一些伪代码来说明我想要实现的目标。

注意我必须维护对 IServiceCollection 的引用,因为提供给 OnShutDown 方法的 IServiceProvider 是一个简单的服务定位器,并且不能执行复杂的查询。

当应用程序关闭时,我想要一种通用的方法来确保所有的单例实例都被处理掉。我可以直接维护对所有这些单例实例的引用,但这不能很好地扩展。

我最初使用工厂方法来确保 DI 管理我的对象的生命周期,但是,工厂方法的执行发生在运行时处理请求的管道中,这意味着如果它抛出异常,则响应为 500 InternalServerError并记录了一个错误。通过直接创建对象,我正在努力获得更快的反馈,以便启动时的错误导致部署期间的自动回滚。这对我来说似乎并不合理,但同时我不会滥用 DI。

有没有人对我如何更优雅地实现这一目标有任何建议?

namespace MyApp
{
    public class Program
    {
        private static readonly CancellationTokenSource cts = new CancellationTokenSource();

        protected Program()
        {
        }

        public static int Main(string[] args)
        {
            Console.CancelKeyPress += OnExit;
            return RunHost(configuration).GetAwaiter().GetResult();
        }

        protected static void OnExit(object sender, ConsoleCancelEventArgs args)
        {
            cts.Cancel();
        }

        static async Task<int> RunHost()
        {
            await new WebHostBuilder()
                .UseStartup<Startup>()
                .Build()
                .RunAsync(cts.Token);
        }
    }

    public …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-2.0 asp.net-core-2.1

7
推荐指数
2
解决办法
4905
查看次数

未找到路径'/ Home'的控制器或未实现IController

我已经在互联网上搜索了高低,并检查了所有以前回答过的问题并且标题相同,我无法想出这个问题.

我从我的身份验证控制器中的action方法返回RedirectToAction("Index","Home"),然后收到以下异常:

Server Error in '/' Application.
The controller for path '/Home' was not found or does not implement IController.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The controller for path '/Home' was not found or does not implement IController.

Source Error:

An unhandled exception was generated during the execution of …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-routing

4
推荐指数
1
解决办法
2万
查看次数