consigo este mensaje para la línea 84 y la línea 85 (los dos, apilados utilizando líneas):forma correcta de Desechar: no objeto dispuesto a lo largo todos los caminos de excepción
CA2000: Microsoft.Reliability: En el método 'RavenDataAccess.GetRavenDatabase()', objeto '<> g_ initLocal9' no está eliminado en todas las rutas de excepción. Call System.IDisposable.Dispose en el objeto '<> g _initLocal9' antes de que todas las referencias estén fuera del alcance.
DocumentStore implementa IDisposable.
¿Por qué? ¿De qué otra forma puedo disponer los objetos de DocumentStore? Se crean en un bloque de uso y los desecho en mi bloque de captura. ¿Cómo debería ser esto arreglado?
private static IDocumentStore GetRavenDatabase()
{
Shards shards = new Shards();
try
{
using (DocumentStore docStore1 = new DocumentStore { Url = ConfigurationManager.AppSettings["RavenShard1"] }) // Line 84
using (DocumentStore docStore2 = new DocumentStore { Url = ConfigurationManager.AppSettings["RavenShard2"] }) // Line 85
{
shards.Add(docStore1);
shards.Add(docStore2);
}
using (ShardedDocumentStore documentStore = new ShardedDocumentStore(new ShardStrategy(), shards))
{
documentStore.Initialize();
IndexCreation.CreateIndexes(typeof(RavenDataAccess).Assembly, documentStore);
return documentStore;
}
}
catch
{
shards.ForEach(docStore => docStore.Dispose());
throw;
}
}
compruébalo, tal vez es lo mismo que tienes: http://stackoverflow.com/questions/3932131/how-to-get-rid-of-ca2000-warning-when-ownership-is-transferred – cookieMonster
Eso el enlace es interesante. Llamaré a Add() en Shards, pero no implementa ICollection. Y como Shards no es mi código, no puedo cambiarlo. Esta es la firma de Shards: shards de clase pública: List –
Ok, ¿tienes la oportunidad de implementar uno más? – cookieMonster