я получаю это сообщение для линии 84 и линий 85 (два, сложенные с использованием линий):правильный способ Dispose: объект не расположен вдоль всех путей исключения
CA2000: Microsoft.Reliability: В методе 'RavenDataAccess.GetRavenDatabase()', object '<> g_ initLocal9' не размещается вдоль всех путей исключения. Вызовите System.IDisposable.Dispose на объекте '<> g _initLocal9', прежде чем все ссылки на него выйдут из области видимости.
DocumentStore реализует IDisposable.
Почему? Как еще я могу удалить объекты DocumentStore? Они созданы в используемом блоке, и я удаляю их в свой блок catch. Как это должно быть исправлено?
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;
}
}
проверить это, может быть, это тот самый материал, который у вас есть: http://stackoverflow.com/questions/3932131/how-to-get-rid-of-ca2000-warning-when-ownership-is-transferred – cookieMonster
Это ссылка интересна. Я вызываю Add() on Shards, но не реализует ICollection. И поскольку Shards не мой код, я не могу его изменить. Это подпись Shards: public class Shards: List –
Хорошо, у вас есть шанс реализовать еще один? – cookieMonster