У меня есть приложение, которое использует ORM (Nhibernate, но это не так).
Чтобы создать NH-сессию, нам нужно куда-то передать: имя пользователя, имя базы данных и т. Д. Итак, я реализовал:
public interface ISettingsManager
{
Settings MySettings {get;set;}
}
public class Settings
{
public string DbUser{get;set;}
public string DbAddress {get;set;}
public string DbPassword{get;set;}
//...
}
public class SessionProvider
{
[Inject]
public ISettingsManager MySettings {get;set;}
public Session CreateSession
{
//Create Session object using settings passed do MySettings via IoC.
}
}
public static Main()
{
// very beggining of my application, bootstrap the DI container
Bind<ISettingsManager>().To<SettingsManagerImpl>();
// Application run
}
У всех моих провайдеров NHibernate-сессии есть ISettingsManager
.через DI (Ninject), поэтому я могу просто использовать его.Это работает как вред, но теперь мне нужно поддержать многих пользователей в моем приложении, и проблема уходит на сцену.Я не могу связать свой ISettingsManager при запуске приложений, потому что я не знаю, когда пользователь войдет в систему.
Итак, вопрос в том, как наилучшим образом реализовать передачу параметров текущего зарегистрированного пользователя, не используя Service Location?