Ron, Thank you very much for you answer! I've never thought of using an in-memory xml stream for configuration. Excellent tip!!
I also wonder how you dynamically fill username and password. Again you modify in memory xml? <dataSource name="Dynamically Filled in at runtime" connectionString="Dynamically Filled in at runtime" /> </database> On 7/21/05, Ron Grabowski <[EMAIL PROTECTED]> wrote: > I'm working on project whose core framework is built using IBatisNet. > It also supports pluggable modules via IBatisNet. This is one of our > example module dao classes. BaseSqlMapDao comes from here: > > http://tinyurl.com/8uks6 > http://svn.apache.org/repos/asf/ibatis/trunk/cs/npetshop/NPetshop.Persistence/MapperDao/BaseSqlMapDao.cs > > public class ModuleNewsArticleSqlMapDao : BaseSqlMapDao > { > private static SqlMapper moduleSqlMapper = null; > > protected override SqlMapper GetSystemSqlMap() > { > // TODO: add double-check > if (moduleSqlMapper == null) > { > // warning: Configure is depreciated > moduleSqlMapper = SqlMapper.Configure(GetModuleSqlMapConfigPath()); > > moduleSqlMapper.DataSource = base.GetSystemSqlMap().DataSource; > } > return moduleSqlMapper; > } > > public IList GetMany() > { > return ExecuteQueryForList("GetMany", null); > } > > // snip > > } > > Modules are placed in their own directory and are required to have > their own ModuleSqlMap.config file. A ModuleSqlMap.config file looks > something like this: > > <sqlMapConfig> > <database> > <provider name="sqlServer1.1"/> > <dataSource > name="Dynamically Filled in at runtime" > connectionString="Dynamically Filled in at runtime" /> > </database> > <sqlMaps> > <sqlMap embedded="Resources.NewsArticle.xml, Foo.Bar.NewsArticle" /> > </sqlMaps> > </sqlMapConfig> > > We have providers.config at the root of the application so it does not > need to be specified. > > That code was originally written for an older version of IBatisNet. > There are overloads now that allow you build a SqlMapper instance from > an XmlDocument, embedded resource, etc. You might be able to do away > with a ModuleSqlMap.config file. I like having the external file > becuase I can turn caching on or off on a per module basis without > recompiling the application. > > While this exact code doesn't exist yet: > > DomSqlMapBuilder builder = new DomSqlMapBuilder(); > builder.AppProperty("SELECT_KEY", "SELECT @@IDENTITIY"); > builder.AddSqlMap("newsModelSqlMap.xml"); > builder.CacheModelsEnabled = true; > _mapper = builder.Configure(); > > It could be implemented by building a sqlMap.config xml document in > memory and passing that in to the existing Configure method. > > - Ron > > --- Tuncay Baskan <[EMAIL PROTECTED]> wrote: > > > 1) I want my developers (specifically module owners) to write only > > SqlMap files. Because there is no need to declare same "provider", > > same "settings", same "database" options in each module. To do this I > > think I need a different configuration API than the current one. I > > tried to analyze IBatisNet.DataMapper.Configuration.DomSqlMapBuilder. > > It simply reads file references from sqlMapConfig/sqlMaps and > > constructs internal data structures. Is there any way that I can > > programmatically specify which SqlMap files will be parsed and > > loaded? > > > > 2) Since the application is multithreaded I wonder if having multiple > > SqlMappers cause problems? > > > > I know I wrote too much in this email. :-) I tried my best to explain > > the situation well.. > > > > -- > > /tb. > > > > -- /tb.

