Я решил использовать синглтон для загрузки некоторого файла при запуске приложения и использовать эту конфигурацию в течение всего срока службы приложения, так как этот файл изменяется один раз в год.
Есть синглтон:
public class Singleton
{
private static IReader reader;
private Singleton(IReader reader)
{
Singleton.reader = reader;
}
private static readonly Lazy<Dictionary<string, HashSet<string>>> lazy =
new Lazy<Dictionary<string, HashSet<string>>>(() => reader.ReadData("config") );
public static Dictionary<string, HashSet<string>> Instance { get { return lazy.Value; } }
}
А на Appstart у меня есть:
IWindsorContainer container = new WindsorContainer();
container.Install(FromAssembly.This());
А на WindsorInstaller у меня есть:
public class WindsorInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<IReader>().ImplementedBy<MyReader>());
}
}
Мой класс читателя следующий:
public class MyReader : IReader
{
public Dictionary<string, HashSet<string>> ReadData(string source)
{
/*some code*/
return dict;
}
}
Кажется, что в Singleton не происходит инъекция, и читатель равен null, и я получаю ошибку: ссылка на объект не установлена для экземпляра объекта. Подскажите, пожалуйста, что я делаю неправильно и как это сделать лучше (возможно, не использовать синглтон вообще)?