Nie powinieneś przechowywać żadnych pojedynczych wystąpień RedisClient
lub IRedisTypedClient<BarSet>
które zawierają niebezpieczne wątkowo połączenie TCP Redis. Zamiast tego możesz przechowywać pojedyncze instancje IRedisClientsManager
- co ma na celu zapewnienie bezpiecznej wątkowo fabryki klientów Redis (takiej jak pula połączeń DB).
Jeśli używasz również usług ServiceStack, łatwiej jest zarejestrować zależności w IOC ServiceStack, więc IRedisClientsManager
można wstrzyknąć jak każdą inną zależność, np. w AppHost.Configure()
:
container.Register<IRedisClientsManager>(c =>
new BasicRedisClientManager("[email protected]:6379"));
Umożliwi to użycie base.Redis
Właściwość RedisClient w usługach ServiceStack, np.:
public class JmaSetsService : Service
{
public object Get(JmaSets request)
{
var redisBarSets = base.Redis.As<BarSet>();
return redisBarSets.Lists[instument_key].GetAll();
}
}
Jeśli używasz base.Redis
nie musisz jawnie usuwać Klienta Redis, ponieważ jest on już automatycznie usuwany przez Usługę, tj.:
public class Service
{
...
public virtual void Dispose()
{
if (redis != null)
redis.Dispose();
...
}
}
Możesz także wstrzyknąć IRedisClientsManager
do własnych klas, jak każda inna zależność przy użyciu właściwości publicznej lub argumentu Konstruktora, np.:
public class RedisBarSetData
{
public virtual IRedisClientsManager RedisManager { get; set; }
private IRedisClient redis;
public virtual IRedisClient Redis
{
get { return redis ?? (redis = RedisManager.GetClient()); }
}
public override void Dispose()
{
if (redis != null)
redis.Dispose();
}
public List<BarSet> getData(BarSets data)
{
setKeys(data); // instrument_key is set in here
return Redis.As<BarSet>().Lists[instrument_key].GetAll();
}
}
Które następnie możesz zarejestrować i automatycznie podłączyć w IOC ServiceStack za pomocą:
container.RegisterAutoWired<RedisBarSetData>();
Który następnie pozwoli ci użyć go jako zależności w twoich usługach:
public class JmaSetsService : Service
{
public RedisBarSetData RedisBarSetData { get; set; }
public object Get(JmaSets request)
{
return RedisBarSetData.getData(new BarSets(request));
}
}
Alternatywą dla tworzenia własnej klasy bazowej jest dziedziczenie z istniejącej wcześniej klasy bazowej LogicBase, która ma już IRedisClientsManager
nieruchomości i powyżej kotła.