Pergunta

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á a usá-lo.

Em suma, tenho uma biblioteca camada de banco de dados, MyProgram.DbLayer, que é utilizado por outros projetos tais como MyProgram.Client etc. Quando eu tinha todos os conjuntos de dados no .Client o connectionString estava em MyProgram.Client.exe. configuração, de modo que eu poderia mudá-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: Esta parece ser uma questão mais geral, com ApplicationSettings.

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

Foi útil?

Solução

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

Com isto quero dizer:

Se eu tiver A.exe que tem uma DAL.cs classe. 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, I terá de "host" o conjunto em um aplicativo em execução e adicionar a seqüência de conexão para que os aplicativos de aplicativo de configuração . Então, eu criar uma nova app.config e especifique o "xyz" seqüência de conexão nele, quando ele é executado, ele executa como esperado.

Agora, se eu alterar a referência no projeto A.exe para usar o novo DAL.dll, o string de 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 através de muitos do Windows e aplicações 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).
  • Melhorar seu código comum ter valores padrão para permitir que ele se conecte ao armazenamento centralizado.
  • A partir daí, o código pode configurar-se, com base nas informações no armazenamento de configuração.

Espero que isso ajude:)

Outras dicas

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 definições de configuração

1: Enrole a sua camada de dados dentro de um serviço executado em 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.

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