【发布时间】:2016-04-28 20:44:04
【问题描述】:
背景:Asp.Net Core 网站使用依赖注入将所需服务中继到网站的各个部分
我有一个服务正在我的 Startup 类的 ConfigureServices 方法中作为 singleton 按以下方式添加到 IServiceCollection:
//Settings
services.AddSingleton<ISettingsService, SettingsService>();
services.AddSingleton<ISettingsIO, SettingsIO>();
services.AddSingleton<ISettings>(f =>
{
return f.GetService<ISettingsService>().GetSettings();
});
这很好用,我需要访问示例的所有页面/控制器都可以毫无问题地这样做。
但是,我现在可以更改在 GetSettings() 方法中提取的数据。这意味着我需要更新添加到 ServiceCollection 的服务。
如何在不将服务从单例更改为瞬态的情况下做到这一点?
感谢您提供的任何帮助!
【问题讨论】:
-
GetSettings是如何实现的? -
我不明白为什么
ISetting也是单身,因为ISettingsService已经准备好了。为什么不将它用作瞬态或作用域,让单身的SettingsService解决它? -
@YacoubMassad - GetSiteSettings 返回一个 ISiteSettings 对象,它是从对数据库的查询中创建的。
-
@Fabien - 除了将 ISettings 更改为 AddTransient 之外,我还需要做些什么吗?我试过了,没有发现明显的变化。
-
一种方法(这可能不是最干净的方法)是让
GetSettings返回ISettings的智能实现。这种实现从一组初始设置(来自数据库的设置)开始,但随后可以返回一组新设置。此实现将为您提供设置新设置的方法。
标签: c# dependency-injection asp.net-core asp.net-core-mvc