2009-10-27 5 views
3

У меня есть проект, который я разрабатываю с помощью SQLite и SubSonic 3. Я хочу знать, как я могу избежать файла App.config в целом. Как сообщить моей программе, что вы используете поставщика данных SQLite. Я имею в виду, как я могу сказать ему это:Избегайте файла App.config в проекте при использовании с SQLite/SubSonic (или любой другой базой данных)

<DbProviderFactories> 
    <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"> 
</DbProviderFactories> 

также можно добавить строку подключения по коду:

<add name="xyz" connectionString="Data Source=xyz.db" providerName="System.Data.SQLite"/> 

ответ

4

Вы можете создать поставщика вручную, передавая строку соединения в:

var p = ProviderFactory.GetProvider("connectionstring", "System.Data.SqlClient"); 

Затем вы можете использовать этот Provider, когда вам нужно. Это идеально подходит для IoC, где вы можете установить правило для IDataProvider дозвуковых в:

ForRequestedType<IDataProvider>() 
    .TheDefault.Is.ConstructedBy(x => 
     ProviderFactory.GetProvider("connectionstring", "System.Data.SqlClient")); 

Должен любить IoC :)

+0

Wow Rob. Он работает безупречно. Благодарю. :) – Yogesh

+0

Можно ли сделать аналогично в SubSonic 2? – Rory

1

Многие библиотеки полагаются на app.config, так что вы рано или поздно все равно это понадобится. Это очень важно для всей платформы .NET. И что вы видите как проблему?

Вы можете легко предоставить свою собственную строку подключения , но я не уверен в загрузке определенного поставщика ADO.NET в код .

Это зависит от того, как вы используете поставщика SQLite, но если его классы жестко закодированы в ваш код, тогда я не думаю, что вам даже нужен DbProviderFactory.

+0

Да. Я знаю, и я даже довольно часто использовал настраиваемые ConfigurationSections. На самом деле, я хотел удалить файл конфигурации для реестра для этого приложения. Но теперь я решил использовать его в любом случае. Но все же мне будет интересно узнать, что это возможно? – Yogesh