Я обновил свой проект с помощью Spring.net Dependency Injection Framwork.Затем я продолжил интеграцию AOP, чтобы включить простой механизм ведения журнала / трассировки.У меня были некоторые проблемы с циклической зависимостью в моем app.config, но я решил:
<spring>
<context>
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net">
<object id="loggingAroundAdvice" type="SetupBuilder.LoggingAroundAdvice"/>
<object id="myServiceObjectTarget" type="SetupBuilder.SetupBuilderModelView, SetupBuilder">
<!--<object name="Model" type="SetupBuilder.SetupBuilderModelView, SetupBuilder">-->
<constructor-arg index="0" ref="MasterData"/>
<property name="FileSelection" ref="FileSelection"/>
<property name="Persistence" ref="Persistence"/>
<property name="Distributor" ref="Distributor"/>
<property name="Document" ref="Document"/>
<property name="StatusWindow" ref="StatusWindow"/>
</object>
<object name="Model" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="target" ref="myServiceObjectTarget"/>
<property name="interceptorNames">
<list>
<value>loggingAroundAdvice</value>
</list>
</property>
</object>
<object name="MasterData" type="VMRedistMasterData.Implementation.VMRedistMasterDataImpl, VMRedistMasterData"/>
<object name="FileSelection" type="SetupBuilder.OpenAndSaveDialog, SetupBuilder"/>
<object name="Persistence" type="VMRedistDelivery.Implementation.Persistence.DeliveryPersistence, VMRedistDelivery"/>
<object name="Distributor" type="VMRedistDelivery.Implementation.Distribution.Distributor, VMRedistDelivery"/>
<object name="Document" type="Word2010ReleaseDocument.Word2010ReleaseDocument, Word2010ReleaseDocument"/>
<object name="StatusWindow" type="SetupBuilder.WpfStatusWindow, SetupBuilder">
<constructor-arg index="0" ref="Model"/>
</object>
</objects>
Мой класс выглядит так:
public interface ISetupBuilderModelViewDependencies
{
IVMRedistMasterData MasterData { get; set; }
IFileSelection FileSelection { get; set; }
IVMRedistPersistence Persistence { get; set; }
IVMRedistDistributor Distributor { get; set; }
IVMRedistReleaseDocument Document { get; set; }
IStatusWindow StatusWindow { get; set; }
}
public class SetupBuilderModelView : ISetupBuilderModelView, ISetupBuilderModelViewDependencies, INotifyPropertyChanged
{
...
public string Customer
{
get { return customer; }
set
{
customer = value;
FirePropertyChanged("Customer");
}
}
...
}
Вот объект Model, назначенный моему главному окну WPF:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
var context = ContextRegistry.GetContext();
var setupBuilderWindow = new SetupBuilderWindow(context.GetObject("Model") as ISetupBuilderModelView);
// SetupBuilderWindow needs an ISetupBuilderModelView argument.
setupBuilderWindow.Show();
}
}
Но если происходят изменения в объекте "Model", мое окно WPF больше не обновляется!Недвижимость изменилась.Событие PropertyChanged генерируется, и кто-то подписался на него.Но никто не пытается получить значения свойства.Механизм трассировки / ведения журнала работает, get_Customer()
вызывается только один раз при запуске, затем никогда.Я не понимаюSpring.Aop.Framework.ProxyFactoryObject
должен передавать каждое событие от целевого объекта всем подписчикам, не так ли?Если это не проблема, и событие прибывает, проблема в собственности?Кеширует ли объект Proxy свойства цели?Я просто не понимаю.
Закомментированная строка в app.config была без AOP.Если я прокомментирую строку выше и раскомментирую эту строку, все будет нормально.
Если у вас есть идеи, пожалуйста, дайте мне знать.Я надеюсь, что предоставил достаточно, но не слишком много информации.Если вам нужна дополнительная информация, я был бы рад предоставить ее.