У меня есть следующий класс.Замок Windsor Установщики с параметрами конструктора
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. Я хочу использовать адаптер словаря замка, чтобы получить свой appSettings и т. Д., И хотел бы знать, как наилучшим образом ввести строку подключения по умолчанию в Connection NHibernateInstaller.
Я знаю, что для документации для инсталляторов требуется публичный конструктор по умолчанию.
Любые предложения были бы замечательными.
Спасибо @stuartd, это в значительной степени то, что я сделал. Другие варианты - изменить мой NHibernateInstaller для внутренней установки, как указано выше, и установить другие установщики с помощью функции FromAssembly. Это означало бы, что мне нужно было бы установить внутренние видимости на моем модульном тестовом классе. – Andrew
@ Вы можете использовать пользовательский установщик InstallerFactory и установить его для игнорирования этого конкретного установщика, есть пример на http://stackoverflow.com/a/9084690/43846 – stuartd
Спасибо за предложение, это выглядит хорошо. – Andrew