Приложение написано с использованием Ninject
Регистрируется как Windows сервис
В процессе активации через ядро (Kernel) загружаются модули (NinjectModule) с многочисленными привязками (Bind)
Для некоторых привязок указываются параметры (WithConstructorArgument)
По умолчанию, при старте параметры считываются из конфигурационного файла, и сервис стартует как WCF
Нужно дать возможность, вызывая специальный метод сервиса переопределять некоторые параметры привязок. Ну, например, это параметры соединения с SQL-сервером, логин или что-то еще. Т.е., не перезапускать сервис заново, а именно переопределить параметры уже работающего экземпляра
Я понимаю, что как-то надо найти через Kernel работающий инстанс сервиса, его модули и сделать, например
var config = new myConfig() { ConnectionString = "..." };
var kernel = new StandardKernel(new DataAccessModule(config));
при этом, в DataAccessModule сказано:
private readonly myConfig _config;
public DataAccessModule(myConfig config)
{
_config = config;
}
public override void Load()
{
Bind<IRepository>().To<SqlRepository>()
.InSingletonScope()
.WithConstructorArgument(typeof(string), _config.ConnectionString);
}
а в SqlRepository:
public string _connectionString;
public SqlRepository(string connectionString)
{
_connectionString = connectionString;
}
но что-то ничего не получается...
причем, я даже уже вижу после "var kernel = new StandardKernel...", что ConnectionString в SqlRepository меняется, но последующие вызовы методов сервиса происходят с параметрами, установленными при первоначальном старте
как сделать, что бы изменения применились к работающему инстансу сервиса?
Регистрируется как Windows сервис
В процессе активации через ядро (Kernel) загружаются модули (NinjectModule) с многочисленными привязками (Bind)
Для некоторых привязок указываются параметры (WithConstructorArgument)
По умолчанию, при старте параметры считываются из конфигурационного файла, и сервис стартует как WCF
Нужно дать возможность, вызывая специальный метод сервиса переопределять некоторые параметры привязок. Ну, например, это параметры соединения с SQL-сервером, логин или что-то еще. Т.е., не перезапускать сервис заново, а именно переопределить параметры уже работающего экземпляра
Я понимаю, что как-то надо найти через Kernel работающий инстанс сервиса, его модули и сделать, например
var config = new myConfig() { ConnectionString = "..." };
var kernel = new StandardKernel(new DataAccessModule(config));
при этом, в DataAccessModule сказано:
private readonly myConfig _config;
public DataAccessModule(myConfig config)
{
_config = config;
}
public override void Load()
{
Bind<IRepository>().To<SqlRepository>()
.InSingletonScope()
.WithConstructorArgument(typeof(string), _config.ConnectionString);
}
а в SqlRepository:
public string _connectionString;
public SqlRepository(string connectionString)
{
_connectionString = connectionString;
}
но что-то ничего не получается...
причем, я даже уже вижу после "var kernel = new StandardKernel...", что ConnectionString в SqlRepository меняется, но последующие вызовы методов сервиса происходят с параметрами, установленными при первоначальном старте
как сделать, что бы изменения применились к работающему инстансу сервиса?