ApplicationSettings todo bibliotecas

votos
0

Estou tentando abstrair todo o código do banco de dados em uma biblioteca separada e, em seguida, usar essa biblioteca em todo o meu código. Todas as conexões de banco de dados são feitas usando TableAdapters digitadas que eu crio, arrastando e soltando em conjuntos de dados em VS2005, usando uma seqüência de conexão das appSettings.

O problema que eu não tenho sido capaz de resolver é que .Net não propagar as bibliotecas appSettings para o outro projeto que está usando.

Em suma, tenho uma biblioteca de camada de base de dados, MyProgram.DbLayer, o qual é utilizado por outros projectos, tais como MyProgram.Client etc. Quando tive todos os conjuntos de dados no .Client o connectionString foi em MyProgram.Client.exe.config modo que Eu poderia alterá-lo depois de construção. Quando me mudei-o na MyProgram.DbLayer essa configuração não está disponível para mim depois de eu construir os binários.

EDIT: Este parece ser um problema mais geral com ApplicationSettings.

O que eu notei foi que, se eu adicionar manualmente um cenário utilizado de uma biblioteca será lido corretamente. A única coisa que eu preciso agora é para a configuração para ser incluída automaticamente na arquivo.config também.

Publicado 09/12/2008 em 15:59
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Se eu entender o seu problema corretamente, parece que você vai precisar

1.) Um contexto de aplicação comum para todas as chamadas de acesso a dados

ou

2.) Uma maneira diferente de acessar as definições de configuração

1: Envolva seu camada de dados dentro de um serviço que é executado sob um único contexto (IIS, Windows Service, etc)

2: Não use o mecanismo de gerenciamento de configuração que você está fornecido. Em vez disso usar arquivos de propriedade em um local específico.

Não se esqueça que embora as definições de configuração em cascata a partir de diferentes níveis. Por exemplo ... se você adicionar uma definição no machine.config, então cada aplicativo em execução na máquina usará essa configuração, a menos que seja substituído em um nível inferior ... Isso pode ser uma boa maneira de configurar um ambiente padronizado dentro do seu arquivos de configuração.

Respondeu 09/12/2008 em 16:22
fonte usuário

votos
1

AppSettings / ConnectionStrings sempre será lido a partir do pool de aplicativo em execução.

Com isto quero dizer:

Se eu tiver A.exeque tem uma classe DAL.cs. DAL.cs lê uma seqüência de conexão de configuração, e ele retorna "abc"como esperado.

Eu, então, mover DAL.cs ao seu próprio projeto e, assim, a sua própria montagem. Eu ainda pode tê-lo chamar a seqüência de conexão de app.config, no entanto, vou precisar de "host" o conjunto em um aplicativo em execução e adicionar a seqüência de conexão para que configuração aplicações aplicativo . Então, eu criar uma nova app.config e especificar a seqüência de conexão "xyz"nele, quando ele é executado, ele executa como esperado.

Agora, se eu mudar a referência no A.exeprojeto para usar o novo DAL.dll, cadeia que conexão que você acha que ele vai ter? "xyz"? Não! Ele usará o "abc"como fazia antes, porque isso ainda está configurado no arquivo de configuração do aplicativo para A.exe.

Eu sei que isso funciona porque eu usei compartilhada código DAL em muitos o Windows e aplicativos da Web.

Se nada disto não é clara, ou não ajudar o seu problema, por favor me avise por comentar sobre esta resposta.

Atualização seguinte comentário do OP

Por "host" Quero dizer uma aplicação que está pedindo ao código comum. Isso pode ser um Windows ou um aplicativo da Web, basicamente, é o contexto do aplicativo.

Você vai precisar para criar entradas nos arquivos de configuração para cada aplicativo que usa o código comum. Se eu não entendi sua pergunta original (inteiramente possível, tem sido um longo dia!) E você deseja centralizar a configuração, bem como, em seguida, você precisa:

  • Criar alguma forma de armazenamento centralizada (seja ele XML, DB, qualquer que seja).
  • Melhore o seu código comum ter valores padrão para permitir que ele se conecte ao armazenamento centralizado.
  • De lá, o código pode configurar-se, com base nas informações no armazenamento de configuração.

Espero que isto ajude :)

Respondeu 09/12/2008 em 16:14
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more