Я использую Spring.NET для подключения приложения WPF средней сложности. Один из объектов представляет собой параметры конфигурации среды, в которой работает приложение. Класс, названный MachineData
, представляет собой в основном кеш для значений, хранящихся на хост-машине: он проверяет, установлен ли конкретный экземпляр MSSql и получает какие-то значения от него, он проверяет, установлена ли другая конкретная программа и получает ли она часть app.config настройки оттуда и т. д. Эти значения требуются многими другими объектами в приложении, но их нужно только один раз извлекать при запуске приложения.Как обрабатывать конфигурацию объекта с помощью Spring.NET
У меня есть MachineData
объект и все объекты, используя его определяется следующим за Spring.NET:
<object id="MachineData" type="IMachineData, SomeProject" singleton="true"/>
<object id="SomeOtherObject">
<constructor-arg name="data" ref="MachineData"/>
</object>
<!-- A bunch of other objects w/ dependencies -->
<object id="MainApp" type="MainApplication">
<property name="OtherObject" ref="SomeOtherObject"/>
<!-- and so on -->
</object>
В MachineData.cs
, у меня есть:
public MachineData()
{
Init();
}
private void Init()
{
// Query database for settings, check app settings of other applications
}
И в App.xaml.cs
:
var ctx = ContextRegistry.GetContext();
MainApplication mainApp = (MainApplication)ctx.GetObject("MainApp");
Что работает отлично, но было бы ferable сделать следующее:
// in MachineData.cs
public MachineData()
{
}
public void Init()
{
// Query database for settings, check app settings of other applications
}
// in App.xaml.cs
var ctx = ContextRegistry.GetContext();
MainApplication mainApp = (MainApplication)ctx.GetObject("MainApp");
var data = (IMachineData)ctx.GetObject("MachineData");
data.Init();
Оба будут иметь один и тот же желаемый эффект, однако первый вариант вводит больше точек отказа в ContextRegistry.GetContext()
вызова, в то время как второй один требует подвергая Init()
к интерфейсу IMachineData
. Где должна выполняться эта логика инициализации?