具有构造函数参数的 Castle Windsor 安装程序
Castle Windsor Installers with constructor parameters
我有以下 class.
public class NHibernateInstaller : IWindsorInstaller
{
private string _overrideConnectionstring;
private IPersistenceConfigurer _persistenceConfigurer;
private static IPersistenceConfigurer _defaultConfiguration;
public IPersistenceConfigurer PersistenceConfigurer
{
get
{
return _persistenceConfigurer ?? (_persistenceConfigurer = MsSqlConfiguration.MsSql2008
.ConnectionString(Config.DefaultConnection));
}
protected set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (_persistenceConfigurer != null)
{
throw new InvalidOperationException("Property has already been set");
}
_persistenceConfigurer = value;
}
}
public void Install(IWindsorContainer container, IConfigurationStore store)
{
var fluentConfiguration = Fluently.Configure()
.Mappings(m =>
{
var autoPersistenceModel = AutoMap.AssemblyOf<Log>()
.UseOverridesFromAssemblyOf<LogMappingOverride>()
.Where(t => t != typeof(SomeNonEntity));
m.AutoMappings.Add(autoPersistenceModel);
});
fluentConfiguration.Database(PersistenceConfigurer);
var sessionFactory = fluentConfiguration.BuildSessionFactory();
container.Register(Component.For<ISessionFactory>()
.Instance(sessionFactory)
.LifestyleSingleton());
container.Register(Component.For<ISession>()
.UsingFactory((ISessionFactory factory) => sessionFactory.OpenSession())
.LifestylePerWebRequest());
}
}
我添加了一个 属性 允许我更改 persistenceconfigurer 以便我可以在测试时更改它。目前,默认的 persistenceconfigurer 用于从包装对 ConfigurationManager 的调用的 public 静态方法获取连接字符串。我想使用 Castle Dictionary Adapter 获取我的 appSettings 等,并想知道将 defaultConnection 连接字符串注入 NHibernateInstaller 的最佳方法。
我知道安装程序的文档需要默认的 public 构造函数。
任何建议都很好。
文档说:
"当安装程序由 Windsor 实例化时,它们必须具有 public 默认构造函数",即如果使用 InstallerFactory
或 FromAssembly
加载它们。
如果您手动添加(或可以添加)安装程序到容器,则不需要默认构造函数,因此这会将连接字符串传递给构造函数,它可以存储在一个字段中:
container.Install(new NHibernateInstaller(defaultConnectionString))
我有以下 class.
public class NHibernateInstaller : IWindsorInstaller
{
private string _overrideConnectionstring;
private IPersistenceConfigurer _persistenceConfigurer;
private static IPersistenceConfigurer _defaultConfiguration;
public IPersistenceConfigurer PersistenceConfigurer
{
get
{
return _persistenceConfigurer ?? (_persistenceConfigurer = MsSqlConfiguration.MsSql2008
.ConnectionString(Config.DefaultConnection));
}
protected set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (_persistenceConfigurer != null)
{
throw new InvalidOperationException("Property has already been set");
}
_persistenceConfigurer = value;
}
}
public void Install(IWindsorContainer container, IConfigurationStore store)
{
var fluentConfiguration = Fluently.Configure()
.Mappings(m =>
{
var autoPersistenceModel = AutoMap.AssemblyOf<Log>()
.UseOverridesFromAssemblyOf<LogMappingOverride>()
.Where(t => t != typeof(SomeNonEntity));
m.AutoMappings.Add(autoPersistenceModel);
});
fluentConfiguration.Database(PersistenceConfigurer);
var sessionFactory = fluentConfiguration.BuildSessionFactory();
container.Register(Component.For<ISessionFactory>()
.Instance(sessionFactory)
.LifestyleSingleton());
container.Register(Component.For<ISession>()
.UsingFactory((ISessionFactory factory) => sessionFactory.OpenSession())
.LifestylePerWebRequest());
}
}
我添加了一个 属性 允许我更改 persistenceconfigurer 以便我可以在测试时更改它。目前,默认的 persistenceconfigurer 用于从包装对 ConfigurationManager 的调用的 public 静态方法获取连接字符串。我想使用 Castle Dictionary Adapter 获取我的 appSettings 等,并想知道将 defaultConnection 连接字符串注入 NHibernateInstaller 的最佳方法。
我知道安装程序的文档需要默认的 public 构造函数。
任何建议都很好。
文档说:
"当安装程序由 Windsor 实例化时,它们必须具有 public 默认构造函数",即如果使用 InstallerFactory
或 FromAssembly
加载它们。
如果您手动添加(或可以添加)安装程序到容器,则不需要默认构造函数,因此这会将连接字符串传递给构造函数,它可以存储在一个字段中:
container.Install(new NHibernateInstaller(defaultConnectionString))