我正在尝试实现Web应用程序并使用单例对象,因此我可以将其注入以便在其他类中使用它。 每当用户在浏览器中打开选项卡或类似内容时,我都想打开一个新对象。例如:
public class Singleton
{
public string Id{get;set;}
public Singleton(){Id=Guid.NewGuid().ToString();)
}
in startup:
services.AddSingleton<Singleton>(s=>new Singleton());
在其他班级:
public class OtherClass{
private readonly Singleton singleton;
public OtherClass(Singleton singleton)
{
this.singleton = singleton;
}
}
问题在于每个标签都具有相同的ID ...我需要为浏览器中的每个标签使用不同的ID ...
谢谢!
答案 0 :(得分:0)
您必须为要成为单身人士的班级创建一个接口。您将其注册为Startup.cs
中的单身人士
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISingleton, Singleton>();
}
然后,您将单例界面注入OtherClass
public class OtherClass{
private readonly Singleton singleton;
public OtherClass(ISingleton singleton)
{
this.singleton = singleton;
}
希望这会有所帮助
答案 1 :(得分:0)
我没有足够的代表发表评论。但是,如果您愿意使用一些JavaScript,则可以在此question上使用第一个答案。使用sessionStorage生成ID后,可以使用ajax mayabe将其转发到C#后端,并将其保存在您的单例中。
请记住,这在IE11中不起作用。
答案 2 :(得分:0)
好的,我找到了一些解决方案。 我正在创建一个单例类,该类具有将更改的对象... 当我想更改对象的详细信息时,可以使用一种方法来执行此操作... 然后,我获得了所有WebApp的更新信息。 将在我需要指定对象详细信息的每种方法中进行更改。 例如:
public class InjectedSingleton
{
public MySession CurrentSession{get;set;}
public void SetSession(string sessionId)
{
CurrentSession = GetSessionById(sessionId);
}
public void NewSession()
{
CurrentSession = new MySession();
}
}
public class DoClass
{
private InjectedSingleton inj;
public DoClass(InjectedSingleton inj)
{
this.inj = inj;
}
public void OpenNewTab(string sessionId)
{
inj.SetSession(sessionId);
}
public void JustShowSomething()
{
Show(inj.CurrentSession.Id);
}
}
现在,更新的会话是必需的会话,适用于当前用户在应用中的所有应用