Qual é a diferença entre SPContext.Atual.Da Web.URL e SPContext.Atual.Site quando usando o objeto SPSite?
Pergunta
SPSite spsite1=new SPSite(SPContext.Current.Web.URL);
SPSite spsite2=SPContext.Current.Site;
Qual é a diferença e quando é que vamos decidir qual usar?
Eu sinto tanto a nos dar o site de objeto de coleção.
Exemplo: SPWeb spweb=spsite1.RootWeb;
vai dizer mesmo que spsite2.RootWeb;
Então por que existem 2 formas de se fazer isso?
Solução
SPSite spsite1=new SPSite(SPContext.Current.Web.Url);
vai dar você SPSite
objecto.Mas vai ser objetos do conjunto de sites apenas quando SPContext.Current.Web.Url
é que de web de raiz.Se o objeto da web é o de um sub-site, em seguida, SPSite
o objeto não é um site de objeto de coleção.A segunda instrução SPSite spsite2=new SPSite(SPContext.Current.Site);
é errado porque não há nenhuma sobrecarga de SPSite
que tem SPSite
como parâmetro.
ATUALIZAÇÃO
Se a intenção é obter a rootweb, em seguida, a segunda é uma maneira melhor de fazê-lo como você não são instanciar um novo SPSite
objecto.Além disso, no primeiro caso, você vai precisar descartar SPSite
objeto de como você está criando uma nova comparado ao segundo em que SPSite
é obtido através de SPContext
o que não deve ser descartado de forma explícita.
Outras dicas
Ambos site1 e site2 retorna o mesmo conjunto de sites (SPSite) objeto.Chamando RootWeb propriedade em ambos os objetos, podemos obter o mesmo web site de nível superior (SPWeb) objeto.
Instrução1:SPSite spsite1=new SPSite(SPContext.Atual.Da Web.URL);
Processo:Se estamos no subsite e estamos chamando o código acima, primeiro-lo a obter o atual subsite web url e passar para o SPSite construtor para obter o Site atual objeto de Coleção.
Instrução2:SPSite spsite2 = SPContext.Atual.Site;
Processo:Agora estamos no subsite e estamos chamando o código acima, que diretamente retrives os objetos do conjunto de Sites.Não há olhando para web parâmetro url para obter o SiteCollection.
Resultado:
spsite1.RootWeb e spsite2.RootWeb retorna o mesmo site de Nível Superior do objeto SPWeb.
spsite1.OpenWeb() retorna o subsite (SPWeb) objeto se estamos no subsite.spsite2.OpenWeb() retorna o site de nível superior (SPWeb), o objeto ainda estamos no subsite.
Para o spsite1, temos a chamada de método dispose para alienar o objeto SPSite.Mas para o spsite2, o sharepoint irá tomar cuidado no descarte do objeto SPSite.