Quando chamar Dispose se passando SPContext.Site para uma biblioteca de classe?
Pergunta
Eu estou apenas procurando por um pouco de verificação de sanidade em um presente!
Eu estou olhando para muitas classes que têm SPSite
ou SPWeb
como um construtor para a classe.
A classe é instanciado usando SPContext.Site
como o parâmetro SPSite
exemplo:
public MyClass {
SPWeb _web;
public MyClass(SPSite site) {
_web = site.RootWeb;
}
// Other methods that make use of _web
}
Deve _web
ser eliminado?É _web apenas um ponteiro para SPContext.O Site.RootWeb ou existe outra cópia do SPWeb
que precisam ser eliminadas?
Eu sei que com SPContext.Site.OpenWeb()
você deve chamar Dispose()
.
Então, o que sobre com o que está acima de utilização?
Vai passar SPSite
/ SPWeb
como atribuir a uma variável local só tem a referência para o mesmo SPContext
?
Solução
No seu caso _web
não precisa ser descartado como você estão recebendo-o RootWeb
e objetos da web obtidos a partir RootWeb
não precisa ser descartado.
EIDT
Além disso, se o SPSite
objeto passado como parâmetro para o construtor é derivada da SPContext
, ele não precisa ser descartado.Caso contrário, ele precisa ser eliminados na chamada classe ou da chamada classe dependendo da necessidade.
Outras dicas
Não explicitamente chamar Dispose() no SPSite.RootWeb propriedade.O descarte de limpeza será processado automaticamente pelo SharePoint e .NET framework.Para o SharePoint existente personalizações de remoção de explícita RootWeb Descarte é recomendado para evitar um caso de borda condição onde o SPContext.Atual.A Web tem a igualdade para o SPSite.RootWeb.Problemas podem ocorrer quando deitar fora RootWeb quando obtidos a partir de qualquer variação de SPContext (Por Exemplo:SPContext.O Site.RootWeb, SPContext.Atual.O Site.RootWeb e GetContextSite(Contexto).RootWeb ).
Para mais visita...MSDN