1
我使用NHibernate 3.0.0.1001和Castle.Facilities.NHibernateIntegration 1.1.0.0城堡NHibernate的集成 - 創建一個通用的configurationBuilder
我使用城堡注入的ISessionManager到我的會話管理類。
我指定我ConfigurationBuilder在web.config中像這樣:
<castle>
<facilities>
<facility id="MyNhibernateFacility"
type="Castle.Facilities.NHibernateIntegration.NHibernateFacility, Castle.Facilities.NHibernateIntegration"
isWeb="false"
configurationBuilder="MyDomainModelAssembly.ConfigurationBuilder, MyDomainModelAssembly">
<factory id="nhibernate.factory">
<settings>
<item key="show_sql">true</item>
<item key="connection.provider">NHibernate.Connection.DriverConnectionProvider</item>
<item key="connection.driver_class">NHibernate.Driver.SqlClientDriver</item>
<item key="dialect">NHibernate.Dialect.MsSql2005Dialect</item>
<item key="connection.connection_string">Data Source=.\SQL2005;Initial
Catalog=MyDb;User Id=xxx;Password=xxx;MultipleActiveResultSets=true</item>
<item key="proxyfactory.factory_class">
NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle</item>
</settings>
</factory>
</facility>
我 「ConfigurationBuilder」 類看起來是這樣的:
public class ConfigurationBuilder : IConfigurationBuilder
{
public Configuration GetConfiguration(IConfiguration facilityConfiguration)
{
var defaultConfigurationBuilder = new DefaultConfigurationBuilder();
var configuration =
defaultConfigurationBuilder.GetConfiguration(facilityConfiguration);
return Fluently.Configure(configuration)
.Mappings(ConfigureMappings)
.BuildConfiguration();
}
public void ConfigureMappings(MappingConfiguration mappingConfiguration)
{
mappingConfiguration.FluentMappings
.AddFromAssemblyOf<MyModelClass>()
.Conventions.Add(
ForeignKey.EndsWith("Id"),
PrimaryKey.Name.Is(n => "Id"),
DefaultCascade.None(),
new HiLoPrimarykeyConvention());
}
public class HiLoPrimarykeyConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
instance.GeneratedBy.HiLo("1000");
}
}
}
我想使ConfigurationBuilder更通用的,所以它不依賴於它映射到的模型。
所以不是:
.AddFromAssemblyOf<MyModelClass>().
我想說的是這樣的:
.AddFromAssemblyOf<T>().
我能做到這一點的ConfigurationBuilder類
但有那麼任何方式指定web.config工具中的「T」是什麼?
例如,我知道我不能做到這一點:
<castle>
<facilities>
<facility ...
configurationBuilder="MyGenericNhibernateSessionManagementAssembly.
ConfigurationBuilder<MyModelClass>, MyGenericNhibernateSessionManagementAssembly">
的可能重複[配置城堡Windosor和通用(HTTP:// stackoverflow.com/questions/2272104/configure-castle-windosor-and-generic) – stuartd
嗨,斯圖爾特,它行嗎?!謝謝,但我認爲這有很大的不同。我試圖避免必須在配置生成器中指定模型。 – Sean