I'm learning Spring.Net and am trying something simple, which is not working. I want to log any method calls decorated with LogCall
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
Test();
InitializeComponent();
}
[LogCall]
public void Test()
{
}
}
public class LogCallInterceptor : IMethodBeforeAdvice
{
public void Before(MethodInfo method, object[] args, object target)
{
Debug.Write(method.Name);
}
}
[Serializable]
[AttributeUsage(AttributeTargets.Method)]
public class LogCallAttribute : Attribute
{
}
}
And here's the App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<spring>
<objects xmlns="http://www.springframework.net">
<object id="TestLogAdvice" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="advice">
<object type="WpfApplication1.LogCallInterceptor, WpfApplication1" />
</property>
<property name="attribute" value="WpfApplication1.LogCallAttribute, WpfApplication1" />
</object>
</objects>
</spring>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Spring.Core" publicKeyToken="65e474d141e25e07" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.2.40943" newVersion="1.3.2.40943" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Spring.Aop" publicKeyToken="65e474d141e25e07" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.2.40943" newVersion="1.3.2.40943" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
I'm really new to all this so I'm not even sure if this is a valid approach.
Based on the first answer, I reworked my example. Still not working? Am I getting warm?
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
var someClass = new SomeClass();
someClass.Test();
InitializeComponent();
}
}
public class SomeClass
{
[LogCall]
public void Test()
{
}
}
public class LogCallInterceptor : IMethodBeforeAdvice
{
public void Before(MethodInfo method, object[] args, object target)
{
Debug.Write(method.Name);
}
}
[Serializable]
[AttributeUsage(AttributeTargets.Method)]
public class LogCallAttribute : Attribute
{
}
}
And the new app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<spring>
<objects xmlns="http://www.springframework.net">
<object id="TestLogAdvice" type="Spring.Aop.Support.AttributeMatchMethodPointcutAdvisor, Spring.Aop">
<property name="advice">
<object type="WpfApplication1.LogCallInterceptor, WpfApplication1" />
</property>
<property name="attribute" value="WpfApplication1.LogCallAttribute, WpfApplication1" />
</object>
</objects>
<object id="mySomeClass" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="target">
<object id="mySomeClassTarget" type="WpfApplication1.SomeClass"/>
</property>
<property name="interceptorNames">
<list>
<value>TestLogAdvice</value>
</list>
</property>
</object>
</spring>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Spring.Core" publicKeyToken="65e474d141e25e07" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.2.40943" newVersion="1.3.2.40943" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Spring.Aop" publicKeyToken="65e474d141e25e07" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.2.40943" newVersion="1.3.2.40943" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>