Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用AspectCore.Extensions.Hosting以后单例生命周期错误 #271

Open
wapco opened this issue Aug 24, 2021 · 1 comment
Open

使用AspectCore.Extensions.Hosting以后单例生命周期错误 #271

wapco opened this issue Aug 24, 2021 · 1 comment

Comments

@wapco
Copy link

wapco commented Aug 24, 2021

1、首先创建一个测试类
`public class TestService
{
private readonly ILogger _logger;
private string test = Guid.NewGuid().ToString();

    public TestService(ILogger<TestService> logger)
    {
        _logger = logger;
        

        //Thread.Sleep(1000);
        
        _logger.LogWarning("调用构造函数 - {0}", test);
    }

    public async Task SendCodeAnonymous()
    {
        _logger.LogWarning("调用方法 - {0}", test);
    }
}`

2、注册为单例模式
services.AddSingleton();

3、在Program中加上UseServiceContext
`using AspectCore.Extensions.Hosting;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace WebApplication
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
            .UseServiceContext();
}

}`

4、通过5个线程同时调用api,日志输出如下,可以看出单例的构造函数被调用了5次
warn: WebApplication.TestService[0] 调用构造函数 - 0f193ff1-4d88-4cdc-983a-65bdbfe99284 warn: WebApplication.TestService[0] 调用构造函数 - be987d52-502a-4101-9ece-ef5e5a8ac935 warn: WebApplication.TestService[0] 调用构造函数 - e8deb6a9-2d1d-42ef-806a-5ced76c53271 warn: WebApplication.TestService[0] 调用构造函数 - 6d03d80d-fdfb-4082-aa7b-0dba6d3faabc warn: WebApplication.TestService[0] 调用构造函数 - 1d43a20f-6228-4f10-8e92-80d944b18739 warn: WebApplication.TestService[0] 调用方法 - 6d03d80d-fdfb-4082-aa7b-0dba6d3faabc warn: WebApplication.TestService[0] 调用方法 - 6d03d80d-fdfb-4082-aa7b-0dba6d3faabc warn: WebApplication.TestService[0] 调用方法 - 6d03d80d-fdfb-4082-aa7b-0dba6d3faabc warn: WebApplication.TestService[0] 调用方法 - 6d03d80d-fdfb-4082-aa7b-0dba6d3faabc warn: WebApplication.TestService[0] 调用方法 - 6d03d80d-fdfb-4082-aa7b-0dba6d3faabc

5、接着注释掉UseServiceContext(),重新用5个线程调用,输出日志如下:
warn: WebApplication.TestService[0] 调用构造函数 - b6d2edf7-ae3b-4a28-8f02-1cedfd956bc8 warn: WebApplication.TestService[0] 调用方法 - b6d2edf7-ae3b-4a28-8f02-1cedfd956bc8 warn: WebApplication.TestService[0] 调用方法 - b6d2edf7-ae3b-4a28-8f02-1cedfd956bc8 warn: WebApplication.TestService[0] 调用方法 - b6d2edf7-ae3b-4a28-8f02-1cedfd956bc8 warn: WebApplication.TestService[0] 调用方法 - b6d2edf7-ae3b-4a28-8f02-1cedfd956bc8 warn: WebApplication.TestService[0] 调用方法 - b6d2edf7-ae3b-4a28-8f02-1cedfd956bc8

说明使用了UseServiceContext后单例的生命周期在多个线程的情况下会被实例化多次。

@liuhaoyang
Copy link
Member

我看一下。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants