Pergunta

Eu tenho dois projetos, o projeto DLL que tem toda a minha lógica e acesso a dados material, e o projeto ASP.NET que faz minhas formas etc.

Estou um pouco confuso. Eu pensei que se eu adicionei a referência System.Web namespace para o projeto DLL que eu seria capaz de fazer referência as informações de estado de sessão da página ASP.NET.

Eu poderia usar cada página para obter a informação de sessão fora e passá-lo para a DLL para o processamento, mas gostaria de ser capaz de processar as coisas diretamente da classe (s) DLL.

Isso é possível?

Eu brincava com o namespace System.Web e apenas parecem capazes de obter uma referência para a variável de sessão.

Obrigado a todos.

Jon

Foi útil?

Solução

Você deve ser capaz de usar HttpContext.Current.Session

Editar

Enquanto sim, eu concordo que você não deve firmemente casal a sua lógica de negócios DAL ou etc assembléias a sessão ASP.Net. Há uma abundância de casos válidos para acessar fora Contexto HTTP de um projeto web.

Controles Web é probally um dos melhores exemplos, reutilizável http módulos etc etc ...

Agora, uma opção se você quiser ter o seu puxar DLL o material da sessão é abstrair sessão fora. Assim, você poderá definir uma interface como IStorage, que a biblioteca vai saber como usar. Então você pode ter uma classe sessionStorage ou MemoryStorage e usar IoC para injetar a classe apropriada em suas classes de biblioteca. Isso lhe dá a liberdade para codificá-lo como você queria que fosse codificado sem amarrar seu código para Session. Oh e um outro benefício, se feito corretamente pode ser usado para não amarrar o seu código para sessão na web também.

Outras dicas

Enquanto o conjunto é carregado no escopo da sessão, ele terá acesso.

Embora este tipo de acoplamento forte não é muito recomendado.

Você sempre pode usar HttpContext.Current.Session em sua DLL, mas este é considerado como uma prática ruim. Uma abordagem melhor seria passar os valores armazenados no dicionário de sessão para a sua DLL ao invés de fazer referência a sessão. Outro benefício que você vai ganhar é que o código em sua DLL não será acoplado ao tempo de execução ASP.NET o que significa que será mais fácil de teste.

Como dito pelos outros, você sempre pode usar HttpContext.Current.Session em sua DLL, eu supor que é o seu BAL, mas você precisa ser muito cuidado. E se o seu DLL é posteriormente consumido por um serviço de janelas, ou algum outro aplicativo que não tem um HttpContext? Sempre que eu fiz isso sempre foi em um método de propriedade get onde eu embrulhar a tentativa de acesso HttpContext.Current.Session em um bloco try catch e se algo der errado eu repull os dados necessários a partir do banco de dados.

Não use HttpContext.Current.Session como seu dll não será executado sempre com o Web Application. Ele pode ser executado com qualquer outro aplicativo como o Windows, Console ITC.

É melhor usar um método que é actully aceitar um parâmetro, que virá forma Session valor, se você estiver usando ASP.Net aplicação, caso contrário, não haverá qualquer dependência do aplicativo. Se o seu projeto dll já desenvolvidos e que você está tentando modificar a lógica de negócios exsiting então não, não se modificar o seu método exsiting, use um método de sobrecarga.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top