Obtendo SPWeb no receptor de recursos
-
10-12-2019 - |
Pergunta
Ao testar minha solução, recebo um erro na ativação do recurso:
Detectado uso de SPRequest para objeto SPWeb fechado anteriormente.Por favor, feche os objetos SPWeb quando terminar com todos os objetos obtidos deles, mas não antes.
É assim que estou obtendo o SPWeb:
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
using (SPWeb web = properties.Feature.Parent as SPWeb)
{
ClassOfMine.doYourStuff(web);
}
}
O que estou fazendo de errado?
Solução
que tal;
aviso:seu recurso precisa ter o escopo definido como web para funcionar, obviamente;)
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
// No need to dispose the web istance, as indicated in the "Do not dispose" guidance
SPWeb web = (SPWeb) properties.Feature.Parent; // added semicolon
ClassOfMine.doYourStuff(web);
}
não usando o recurso:
se não, use o spcontext para obter a web raiz
SPContext.Current.Site.RootWeb
ou - para a web atual
SPContext.Current.Web
ou - para um URL específico
SPContext.Current.Site.OpenWeb("Website_URL"))
para usar o recurso acima, você precisaria usar as propriedades:
use as propriedades para obter o site para obter o rootWeb
SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.RootWeb)
{
}
ou - para a web atual
SPWeb web = properties.Feature.Parent as SPWeb;
ou - para um URL específico
SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.OpenWeb("Website_URL"))
{
}
Outras dicas
Você está fazendo certo.Apenas o escopo do recurso deve ser web.O atributo "Parent" é sempre o objeto do escopo do recurso.
Você também está descartando o objeto usando.
O único problema com SPContext é que você não pode ativar o recurso no PowerShell porque não há contexto http.