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();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论