具有构造函数参数的 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 默认构造函数",即如果使用 InstallerFactoryFromAssembly加载它们。

如果您手动添加(或可以添加)安装程序到容器,则不需要默认构造函数,因此这会将连接字符串传递给构造函数,它可以存储在一个字段中:

container.Install(new NHibernateInstaller(defaultConnectionString))