how can working data redirected section enterpriselibrary data access application block?
i have definitions databases removed app.config , placed on standalone database.config file.
i try same way doing logging.config , and exception.config files can't work.
using microsoft.practices.enterpriselibrary.common.configuration; using microsoft.practices.enterpriselibrary.data; using microsoft.practices.enterpriselibrary.data.sql; using microsoft.practices.enterpriselibrary.exceptionhandling; using microsoft.practices.enterpriselibrary.logging; using system; using system.data; namespace entlib6 { class program { static void main(string[] args) { iconfigurationsource source = configurationsourcefactory.create(); logwriterfactory logwriterfactory = new logwriterfactory(source); var logwriter = logwriterfactory.create(); logger.setlogwriter(logwriter); var exceptionpolicyfactory = new exceptionpolicyfactory(source); var exceptionmanager = exceptionpolicyfactory.createmanager(); exceptionpolicy.setexceptionmanager(exceptionmanager); databaseproviderfactory factory = new databaseproviderfactory(source); databasefactory.setdatabaseproviderfactory(factory, false); // test logging block logwriter.write("this test"); // test exception block try { throw new notimplementedexception(); } catch (exception exception) { exception newexception; var rethrownewexception = exceptionpolicy.handleexception(exception, "policy", out newexception); if (rethrownewexception) throw newexception; } // test data block fails error code below // system.invalidoperationexception unhandled // message=the configuration file not define default database. var sqlserverdb = databasefactory.createdatabase() sqldatabase; using (idatareader reader = sqlserverdb.executereader(commandtype.text, "select top 1 * production.product")) { while (reader.read()) { (int = 0; < reader.fieldcount; i++) { console.writeline("{0} = {1}", reader.getname(i), reader[i]); } console.writeline(""); } } } } } i expose configurations files here below:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="enterpriselibrary.configurationsource" type="microsoft.practices.enterpriselibrary.common.configuration.configurationsourcesection, microsoft.practices.enterpriselibrary.common" requirepermission="true" /> </configsections> <enterpriselibrary.configurationsource selectedsource="systemconfiguration"> <sources> <add name="systemconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.systemconfigurationsource, microsoft.practices.enterpriselibrary.common" /> <add name="exceptionconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="exception.config" /> <add name="loggingconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="logging.config" /> <add name="policyconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="policy.config" /> <add name="databaseconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="database.config" /> </sources> <redirectsections> <add sourcename="exceptionconfiguration" name="exceptionhandling" /> <add sourcename="loggingconfiguration" name="loggingconfiguration" /> <add sourcename="policyconfiguration" name="policyconfiguration" /> <add sourcename="databaseconfiguration" name="databaseconfiguration" /> </redirectsections> </enterpriselibrary.configurationsource> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.5" /> </startup> </configuration> <?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="dataconfiguration" type="microsoft.practices.enterpriselibrary.data.configuration.databasesettings, microsoft.practices.enterpriselibrary.data" requirepermission="true" /> </configsections> <dataconfiguration defaultdatabase="defaultconnection" /> <connectionstrings> <add name="defaultconnection" connectionstring="data source=(localdb)\v11.0;initial catalog=adventureworks2008r2;integrated security=true" providername="system.data.sqlclient" /> </connectionstrings> </configuration> <?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="loggingconfiguration" type="microsoft.practices.enterpriselibrary.logging.configuration.loggingsettings, microsoft.practices.enterpriselibrary.logging" requirepermission="true" /> </configsections> <loggingconfiguration name="" tracingenabled="true" defaultcategory="general"> <listeners> <add name="rolling flat file trace listener" type="microsoft.practices.enterpriselibrary.logging.tracelisteners.rollingflatfiletracelistener, microsoft.practices.enterpriselibrary.logging" listenerdatatype="microsoft.practices.enterpriselibrary.logging.configuration.rollingflatfiletracelistenerdata, microsoft.practices.enterpriselibrary.logging" formatter="text formatter" /> </listeners> <formatters> <add type="microsoft.practices.enterpriselibrary.logging.formatters.textformatter, microsoft.practices.enterpriselibrary.logging" template="timestamp: {timestamp}{newline}
message: {message}{newline}
category: {category}{newline}
priority: {priority}{newline}
eventid: {eventid}{newline}
severity: {severity}{newline}
title:{title}{newline}
machine: {localmachine}{newline}
app domain: {localappdomain}{newline}
processid: {localprocessid}{newline}
process name: {localprocessname}{newline}
thread name: {threadname}{newline}
win32 threadid:{win32threadid}{newline}
extended properties: {dictionary({key} - {value}{newline})}" name="text formatter" /> </formatters> <categorysources> <add switchvalue="all" name="general"> <listeners> <add name="rolling flat file trace listener" /> </listeners> </add> </categorysources> <specialsources> <allevents switchvalue="all" name="all events" /> <notprocessed switchvalue="all" name="unprocessed category" /> <errors switchvalue="all" name="logging errors & warnings"> <listeners> <add name="rolling flat file trace listener" /> </listeners> </errors> </specialsources> </loggingconfiguration> </configuration> <?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="exceptionhandling" type="microsoft.practices.enterpriselibrary.exceptionhandling.configuration.exceptionhandlingsettings, microsoft.practices.enterpriselibrary.exceptionhandling" requirepermission="true" /> </configsections> <exceptionhandling> <exceptionpolicies> <add name="policy"> <exceptiontypes> <add name="notimplementedexception" type="system.notimplementedexception, mscorlib" posthandlingaction="none"> <exceptionhandlers> <add name="logging exception handler" type="microsoft.practices.enterpriselibrary.exceptionhandling.logging.loggingexceptionhandler, microsoft.practices.enterpriselibrary.exceptionhandling.logging" logcategory="general" eventid="100" severity="error" title="enterprise library exception handling" formattertype="microsoft.practices.enterpriselibrary.exceptionhandling.textexceptionformatter, microsoft.practices.enterpriselibrary.exceptionhandling" priority="0" /> </exceptionhandlers> </add> </exceptiontypes> </add> </exceptionpolicies> </exceptionhandling> </configuration>
there few ways have separate configuration files:
- redirectedsection
- built-in .net configsource
- fileconfigurationsource
redirectedsections approach
i think error in configuration haven't redirected connectionstrings section.
app.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="enterpriselibrary.configurationsource" type="microsoft.practices.enterpriselibrary.common.configuration.configurationsourcesection, microsoft.practices.enterpriselibrary.common, version=6.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35" requirepermission="true" /> </configsections> <enterpriselibrary.configurationsource selectedsource="system configuration source"> <sources> <add name="system configuration source" type="microsoft.practices.enterpriselibrary.common.configuration.systemconfigurationsource, microsoft.practices.enterpriselibrary.common, version=6.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35" /> <add name="file-based configuration source" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common, version=6.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35" filepath="data.config" /> </sources> <redirectsections> <add sourcename="file-based configuration source" name="dataconfiguration" /> <add sourcename="file-based configuration source" name="connectionstrings" /> </redirectsections> </enterpriselibrary.configurationsource> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.5" /> </startup> </configuration> data.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="dataconfiguration" type="microsoft.practices.enterpriselibrary.data.configuration.databasesettings, microsoft.practices.enterpriselibrary.data, version=6.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35" requirepermission="true" /> </configsections> <dataconfiguration defaultdatabase="abc" /> <connectionstrings> <add name="abc" connectionstring="abc" providername="system.data.sqlclient" /> </connectionstrings> </configuration> bootstrap code:
databaseproviderfactory factory = new databaseproviderfactory(new systemconfigurationsource()); databasefactory.setdatabaseproviderfactory(factory, false); configsource approach
use built-in .net configsource redirect configsections external file.
app.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="dataconfiguration" type="microsoft.practices.enterpriselibrary.data.configuration.databasesettings, microsoft.practices.enterpriselibrary.data, version=6.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35" requirepermission="true" /> </configsections> <dataconfiguration configsource="data.config" /> <connectionstrings configsource="connections.config" /> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.5" /> </startup> </configuration> connections.config:
<?xml version="1.0" encoding="utf-8" ?> <connectionstrings> <add connectionstring="abc" name="abc" providername="system.data.sqlclient"/> </connectionstrings> data.config:
<?xml version="1.0" encoding="utf-8" ?> <dataconfiguration defaultdatabase="abc" /> bootstrap code:
databaseproviderfactory factory = new databaseproviderfactory(); databasefactory.setdatabaseproviderfactory(factory, false); fileconfigurationsource approach
use fileconfigurationsource @ bootstrap load appropriate configuration files. since load fileconfigurationsource directly @ startup app.config not need enterprise library configuration:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.5" /> </startup> </configuration> data.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configsections> <section name="dataconfiguration" type="microsoft.practices.enterpriselibrary.data.configuration.databasesettings, microsoft.practices.enterpriselibrary.data, version=6.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35" requirepermission="true" /> </configsections> <dataconfiguration defaultdatabase="abc" /> <connectionstrings> <add name="abc" connectionstring="abc" providername="system.data.sqlclient" /> </connectionstrings> </configuration> bootstrap code:
fileconfigurationsource configsource = new fileconfigurationsource("data.config"); databaseproviderfactory factory = new databaseproviderfactory(configsource); if wanted ability modify config file load (i.e. "data.config") use appsetting specify file load.
Comments
Post a Comment