• 4
  • 新人请关照

WPF .Net Core 3.1 AddSingleton 作用域无效

### 问题描述
在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();
    }
阅读 177
评论
    0 个回答
    撰写回答

    登录后参与交流、获取后续更新提醒

    相似问题
    推荐文章