我已經使用Spring.net Dependency Injection Framwork更新了我的項目。然後我繼續整合AOP以啓用簡單的日誌記錄/跟蹤機制。我有一些問題,在我的app.config圓形dependendy,但我的工作了:Spring.net AOP似乎干擾了WPF數據綁定
<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");
}
}
...
}
這裏是分配模型對象我的主要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();
}
}
但是,如果更改「模型」對象發生,我的WPF窗口不再更新!物業改變了。 PropertyChanged事件被拋出,有人已訂閱它。但是沒有人試圖獲得屬性值。跟蹤/日誌記錄機制起作用,get_Customer()
僅在啓動時調用一次,然後再次不會。我不明白。 Spring.Aop.Framework.ProxyFactoryObject
應該將每個事件從目標對象轉移給所有用戶,不是嗎?如果這不是問題並且事件到達,那麼財產中的問題是什麼? Proxy對象是否緩存目標的屬性?我只是不明白。
app.config中的註釋行沒有AOP。如果我對上面的行註釋並取消註釋,則一切正常。
如果您有任何想法,請讓我知道。我希望我提供了足夠但不是太多的信息。如果您需要更多信息,我會很樂意提供。
將myServiceObjectTarget對象移動到Model對象中不起作用。以編程方式調用工廠不起作用。 – dutop 2011-03-29 07:30:40
工廠創建的對象似乎不像我想的那樣與普通對象相連。建議_only_對WPF窗口中的更改作出反應。不顯示SetupBuilderModelView類中的更改。 – dutop 2011-03-29 07:39:25