Sto usando SignalR con StackExchange Redis. Cosa raccolgo dal documento di utilizzo di base è il modo per implementare questo utilizzando un singleton. Non ho mai usato questo patter prima d'ora. La mia classe ha questo aspetto:
public class RedisInstance
{
public static readonly RedisInstance Instance = new RedisInstance();
public static ConnectionMultiplexer Redis;
public RedisInstance()
{
Redis = ConnectionMultiplexer.Connect("localhost");
}
}
L'ho usato in questo modo
public class DashHub : Hub
{
public void MapUser(int userId)
{
var user = new AppUser() {Id = userId, ConnectionIds = new List<string>() {Context.ConnectionId } };
var db = RedisInstance.Redis.GetDatabase();
var userJson = JsonConvert.SerializeObject(user);
db.StringSet(userId.ToString(), userJson);
}
Ma pensavo che questo fosse piuttosto restringente se lo costruissi e in futuro volessi usare qualcosa di diverso da Redis, quindi stavo per farlo
public class DatabaseRepository
{
IDatabase db;
public DatabaseRepository()
{
this.db = RedisInstance.Redis.GetDatabase();
}
public void Insert(string key, string value)
{
db.StringSet(key, value);
}
}
e quindi fai riferimento a ciò nelle altre mie classi. Sto usando questi modelli appropriatamente qui? Ci sono problemi con l'utilizzo di un singleton in questo modo? Questo può sembrare semplice ma sto solo imparando questo e voglio esserne sicuro.