C#, 假設有二個class都是Singleton, class A 和 class B
class A 無法取得 class B 的 Instance. 反之也是. 是這樣子嗎?
如果是, 請問, 有什麼辦法可以解決嗎?
using System;
namespace SingletonExample
{
class Program
{
static void Main(string[] args)
{
// 創建SingletonA對象
SingletonA a = SingletonA.GetInstance();
// 在SingletonA中設置數據
a.Name = "John Doe";
a.Age = 30;
// 創建SingletonB對象
SingletonB b = SingletonB.GetInstance();
// 訪問SingletonA並獲取數據
string name = b.GetName();
int age = b.GetAge();
// 在控制台上輸出數據
Console.WriteLine("Name: " + name);
Console.WriteLine("Age: " + age);
Console.ReadLine();
}
}
// SingletonA類
class SingletonA
{
// 宣告SingletonA類別的靜態成員變數instance,初始值為null
private static SingletonA instance = null;
// 宣告Name和Age屬性,並可透過Get和Set方法來取得和設定值
public string Name { get; set; }
public int Age { get; set; }
// 將建構子設為private,防止外部直接建立實例
private SingletonA()
{
}
// GetInstance方法:透過此方法來取得SingletonA的實例
public static SingletonA GetInstance()
{
// 如果instance為null,表示還未創建SingletonA實例,則創建一個新的實例
if (instance == null)
{
instance = new SingletonA();
}
return instance;
}
}
// SingletonB類
class SingletonB
{
// 宣告SingletonB類別的靜態成員變數instance,初始值為null
private static SingletonB instance = null;
// 將建構子設為private,防止外部直接建立實例
private SingletonB()
{
}
// GetInstance方法:透過此方法來取得SingletonB的實例
public static SingletonB GetInstance()
{
// 如果instance為null,表示還未創建SingletonB實例,則創建一個新的實例
if (instance == null)
{
instance = new SingletonB();
}
return instance;
}
// GetName方法:從SingletonA獲取Name數據
public string GetName()
{
return SingletonA.GetInstance().Name;
}
// GetAge方法:從SingletonA獲取Age數據
public int GetAge()
{
return SingletonA.GetInstance().Age;
}
}
}
用net core的話,以下供參考:
public class SingletonA
{
private readonly IServiceProvider _serviceProvider;
public SingletonA(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public void Test()
{
_serviceProvider.GetRequiredService<SingletonB>();
}
}