Exemplo de log do Spring.net usando aop
Estou aprendendo o Spring.Net e estou tentando algo simples, que não está funcionando. Quero registrar qualquer chamada de método decorada comLogCall
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
{
}
}
E aqui está o 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>
Eu sou realmente novo em tudo isso, então nem tenho certeza se essa é uma abordagem válid
Com base na primeira resposta, reformulei meu exemplo. Ainda não funciona? Estou ficando quente?
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
{
}
}
E o novo 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>