Я использую Nhibernate 3.0.0.1001 и Castle.Facilities.NHibernateIntegration 1.1.0.0
Я использую Castle для добавления ISessionManager в мои классы управления сеансами.
Я указываю My 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
но есть ли способ указать, что означает "T" в средстве web.config?
Например, я знаю, что не могу сделать это:
<castle>
<facilities>
<facility ...
configurationBuilder="MyGenericNhibernateSessionManagementAssembly.
ConfigurationBuilder<MyModelClass>, MyGenericNhibernateSessionManagementAssembly">