WPF .Net Core 3.1 AddSingleton 作用域无效

发布于 2022-09-12 04:16:50 字数 1893 浏览 18 评论 0

### 问题描述
在App.xaml.cs中注入了Config类的单个实例, 在MainWindow中对修改了config的属性, 但是在Blaster中config是一个新的实例.
TryAddSingleton的生命周期和作用域完全无效, 请高手帮忙解答下. 非常感谢!

App.xaml.cs

public partial class App
{
    protected override void OnStartup(StartupEventArgs e)
    {
        Init();
        base.OnStartup(e);
    }
    
    private void ConfigureServices(IServiceCollection services)
    {
        //日志
        services.TryAddSingleton<Log>();
        //配置
        services.TryAddSingleton<Config>();
        //机器人
        services.TryAddSingleton<Blaster>();
        //主界面
        services.TryAddTransient<MainWindow>();
    }

    private void Init()
    {
        IServiceCollection services = new ServiceCollection();
        ConfigureServices(services);
        services.BuildServiceProvider()
            .GetRequiredService<MainWindow>()
            .Show();
    }
}

MainWindow.xmal.cs 中修改了config

    public MainWindow(Log logger, Config config, Blaster blaster)
    {
        InitializeComponent();
        _logger = logger;
        _config = config;
        _blaster = blaster;
        _path = $"{System.Environment.CurrentDirectory}\\config.tmp";
        ReadConfig();
        Main.DataContext = _config;
    }

    /// <summary>
    /// 读取数据
    /// </summary>
    private void ReadConfig()
    {
        if (!File.Exists(_path)) return;
        var content = File.ReadAllText(_path);
        if (content.TryJsonParse(out Config config, out _))
        {
            _config = config;
        }
    }
Blaster.cs中的config是一个新的实例, 内存地址和MainWindow中的config不同
    public Blaster(Log logger, Config config)
    {
        _logger = logger;
        _config = config;
        _path = Environment.CurrentDirectory + "\\cache.tmp";
        ReadData();
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文