简单的问题,我打赌一个不那么简单的答案。
想想像Wordpress这样的项目。 Wordpress的基础非常棒,开发人员将其构建为使用小部件或插件等进行扩展。
现在想想NHibernate,特别是Fluent Mappings。
将它们组合在一起,您就拥有了一个强大而稳定的“基础”系统但是如何加载外部组件提供的映射?我意识到系统必须使用反射动态加载Assemblies,但是如何在第一次运行时配置nHibernate,Fluently以实现从这些程序集中加载额外的实体?你怎么引用它们?
我知道你可以;在配置完成后在运行时添加Mappings,你必须重新创建SessionFactory。这就是我想在运行时加载所有必需实体的原因。
我也知道这可以通过Dependancy Injection来实现,但我不希望走那条路,也不想要随之而来的极端行李。
如果可以修改普通的旧nHiberante配置文件,然后在运行时引用它以反映新的实体,我只能假设必须有一种方法可以流畅地完成它。
此外,根据答案:您是从基础项目还是数据访问程序集进行配置?
感谢您的帮助。
答案 0 :(得分:4)
您可以将NHibernate配置对象传递给Fluently.Configure()
。这样您就可以更新配置。当你这样做时,你需要重新创建会话工厂,就像你说的那样。
您可以在bin文件夹中扫描包含流畅映射类(Assembly.Load
的程序集的程序集,然后检查
Assembly.GetExportedTypes()
.Any(x => x.IsClass
&& !x.IsAbstract
&& typeof(IMappingProvider).IsAssignabledFrom(type))
或类似的)并添加程序集。扫描完所有装配后,(重新)创建会话工厂。
我在我编写的可扩展应用程序框架中做了类似的事情(虽然我已经从Fluent NHibernate转移到NHibernate映射代码,但原理类似)。