You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(2) |
Aug
|
Sep
(5) |
Oct
(59) |
Nov
(22) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(11) |
Feb
(3) |
Mar
(9) |
Apr
(6) |
May
(5) |
Jun
(4) |
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
|
From: Deyan P. <de...@ho...> - 2004-10-23 12:33:07
|
Ooops, now the methodInfo is not being passed to the Pre and PostProcess methods :( You can get the MethodBase once and cache it for all subsequent calls ... Br, Deyan ----- Original Message ----- From: "Deyan Petrov" <de...@ho...> To: <asp...@li...> Sent: Saturday, October 23, 2004 2:30 PM Subject: Re: [Aspectsharp-users] Proposal: Big Change > Hi hammett, > > Why don't you simply generate something like the stuff below? I think that > if you don't use runtime reflection the execution will be measurable with > the unproxied execution, otherwise it's much slower ...: > > class MyClassProxy : MyClass > { > ... > > private IInvocationHandler _handler; > > public override object DoSomething(int x) > { > object result = null; > if(!_handler.PreProcess(base, ref result)) return result; > result = base.DoSomething(x); > _handler.PostProcess(base, ref result); > > return result; > } > > public override void DoSomethingElse(int x) > { > if(!_handler.PreProcess(base)) return; > base.DoSomethingElse(x); > _handler.PostProcess(base); > return; > } > > } > > Br, > Deyan Petrov > > ----- Original Message ----- > From: "hammett" <ha...@uo...> > To: <asp...@li...> > Sent: Saturday, October 23, 2004 9:59 AM > Subject: [Aspectsharp-users] Proposal: Big Change > > > > Guys, > > > > I've stopped for a while to analyze our strategy on proxying concrete > > classes. Just to set a common ground: > > > > MyClass x = new MyClass() > > > > ProxyGenerator generator = new ProxyGenerator(); > > StandardInvocationHandler handler = new > > StandardInvocationHandler(myClass); > > MyClass proxy = (MyClass) > > generator.CreateClassProxy( typeof(MyClass), handler ); > > > > > > -=- How it works? -=- > > > > The generator creates a dynamic type which extends MyClass and override > all > > methods creating stubs. These stubs code are something like: > > > > public override void DoSomething( int val ) > > { > > MethodInfo m = MethodBase.GetMethodFromHandle( ldtoken method ); > > handler.Invoke( this, m, val ); > > } > > > > So every invocation has to delegate the to a "real" class instance. In the > > code above, the x will be the real instance. Thus we have two copies of > the > > same class. Do we really need them? > > The DynamicProxy originally intented to proxy interfaces, and someway it > > grow offering proxy capabilities to concrete classes, but now I realize > that > > the interface should be different. > > > > > > -=- Proposal -=- > > > > interface IClassInterceptor // better name? > > { > > object Intercept( IInvocation invocation ); > > } > > > > interface IInvocation > > { > > object[] Arguments { get; set; } > > > > object Proxy { get; set; } > > > > object Proceed(); > > } > > > > > > Now the user, instead of using a IInvocationHandler, should use > > > > ProxyGenerator generator = new ProxyGenerator(); > > DefaultClassInterceptor interceptor = new DefaultClassInterceptor(); > > > > MyClass proxy = (MyClass) generator.CreateClassProxy( typeof(MyClass), > > handler ); > > > > Now we dont have separate instances. When a method is invoked on the > proxy, > > the Intercept is invoked. If the user invoke the Invocation.Proceed, the > > proxy calls the super class to invoke the real implementation. How do you > > like that? > > > > > > -=- Under the hood -=- > > > > I've played for five minutes, so I'm not sure if this is the best > approach, > > with the best performance, but it relies on delegates. > > > > class MyClassProxy : MyClass > > { > > ... > > > > delegate void __MyClass_DoSomething(int x); > > > > public override void DoSomething(int x) > > { > > MethodInfo m = MethodBase.GetMethodFromHandle( ldtoken method ); > > InvocationImpl invocation = new InvocationImpl( this, m, new > > __MyClass_DoSomething(callback__DoSomething), x ); > > interceptor.Intercept( invocation ); > > } > > > > private void callback__DoSomething(int x) > > { > > base.DoSomething(x); > > } > > } > > > > class InvocationImpl : IInvocation > > { > > public InvocationImpl( object proxy, MethodInfo m, delegate call, params > > object[] args ) > > { > > .. > > } > > > > public object Proceed() > > { > > call.DynamicInvoke( args ); > > } > > } > > > > > > Yes, it works! > > But before I start to code this beast we need to agree on these > interfaces. > > Also, can we think of something similar to interface proxies? > > We're close to the first non-beta release and once this is release, change > > interfaces will hurt users, and we don't want that. > > > > > > -- > > Cheers, > > hammett > > http://www.digitalcraftsmen.com.br/~hammett > > > > > > > > > > > > ------------------------------------------------------- > > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > > Use IT products in your business? Tell us what you think of them. Give us > > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > > http://productguide.itmanagersjournal.com/guidepromo.tmpl > > _______________________________________________ > > Aspectsharp-users mailing list > > Asp...@li... > > https://lists.sourceforge.net/lists/listinfo/aspectsharp-users > > > |
From: Deyan P. <de...@ho...> - 2004-10-23 12:31:09
|
Hi hammett, Why don't you simply generate something like the stuff below? I think that if you don't use runtime reflection the execution will be measurable with the unproxied execution, otherwise it's much slower ...: class MyClassProxy : MyClass { ... private IInvocationHandler _handler; public override object DoSomething(int x) { object result = null; if(!_handler.PreProcess(base, ref result)) return result; result = base.DoSomething(x); _handler.PostProcess(base, ref result); return result; } public override void DoSomethingElse(int x) { if(!_handler.PreProcess(base)) return; base.DoSomethingElse(x); _handler.PostProcess(base); return; } } Br, Deyan Petrov ----- Original Message ----- From: "hammett" <ha...@uo...> To: <asp...@li...> Sent: Saturday, October 23, 2004 9:59 AM Subject: [Aspectsharp-users] Proposal: Big Change > Guys, > > I've stopped for a while to analyze our strategy on proxying concrete > classes. Just to set a common ground: > > MyClass x = new MyClass() > > ProxyGenerator generator = new ProxyGenerator(); > StandardInvocationHandler handler = new > StandardInvocationHandler(myClass); > MyClass proxy = (MyClass) > generator.CreateClassProxy( typeof(MyClass), handler ); > > > -=- How it works? -=- > > The generator creates a dynamic type which extends MyClass and override all > methods creating stubs. These stubs code are something like: > > public override void DoSomething( int val ) > { > MethodInfo m = MethodBase.GetMethodFromHandle( ldtoken method ); > handler.Invoke( this, m, val ); > } > > So every invocation has to delegate the to a "real" class instance. In the > code above, the x will be the real instance. Thus we have two copies of the > same class. Do we really need them? > The DynamicProxy originally intented to proxy interfaces, and someway it > grow offering proxy capabilities to concrete classes, but now I realize that > the interface should be different. > > > -=- Proposal -=- > > interface IClassInterceptor // better name? > { > object Intercept( IInvocation invocation ); > } > > interface IInvocation > { > object[] Arguments { get; set; } > > object Proxy { get; set; } > > object Proceed(); > } > > > Now the user, instead of using a IInvocationHandler, should use > > ProxyGenerator generator = new ProxyGenerator(); > DefaultClassInterceptor interceptor = new DefaultClassInterceptor(); > > MyClass proxy = (MyClass) generator.CreateClassProxy( typeof(MyClass), > handler ); > > Now we dont have separate instances. When a method is invoked on the proxy, > the Intercept is invoked. If the user invoke the Invocation.Proceed, the > proxy calls the super class to invoke the real implementation. How do you > like that? > > > -=- Under the hood -=- > > I've played for five minutes, so I'm not sure if this is the best approach, > with the best performance, but it relies on delegates. > > class MyClassProxy : MyClass > { > ... > > delegate void __MyClass_DoSomething(int x); > > public override void DoSomething(int x) > { > MethodInfo m = MethodBase.GetMethodFromHandle( ldtoken method ); > InvocationImpl invocation = new InvocationImpl( this, m, new > __MyClass_DoSomething(callback__DoSomething), x ); > interceptor.Intercept( invocation ); > } > > private void callback__DoSomething(int x) > { > base.DoSomething(x); > } > } > > class InvocationImpl : IInvocation > { > public InvocationImpl( object proxy, MethodInfo m, delegate call, params > object[] args ) > { > .. > } > > public object Proceed() > { > call.DynamicInvoke( args ); > } > } > > > Yes, it works! > But before I start to code this beast we need to agree on these interfaces. > Also, can we think of something similar to interface proxies? > We're close to the first non-beta release and once this is release, change > interfaces will hurt users, and we don't want that. > > > -- > Cheers, > hammett > http://www.digitalcraftsmen.com.br/~hammett > > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Aspectsharp-users mailing list > Asp...@li... > https://lists.sourceforge.net/lists/listinfo/aspectsharp-users > |
From: hammett <ha...@uo...> - 2004-10-23 03:59:28
|
Guys, I've stopped for a while to analyze our strategy on proxying concrete classes. Just to set a common ground: MyClass x = new MyClass() ProxyGenerator generator = new ProxyGenerator(); StandardInvocationHandler handler = new StandardInvocationHandler(myClass); MyClass proxy = (MyClass) generator.CreateClassProxy( typeof(MyClass), handler ); -=- How it works? -=- The generator creates a dynamic type which extends MyClass and override all methods creating stubs. These stubs code are something like: public override void DoSomething( int val ) { MethodInfo m = MethodBase.GetMethodFromHandle( ldtoken method ); handler.Invoke( this, m, val ); } So every invocation has to delegate the to a "real" class instance. In the code above, the x will be the real instance. Thus we have two copies of the same class. Do we really need them? The DynamicProxy originally intented to proxy interfaces, and someway it grow offering proxy capabilities to concrete classes, but now I realize that the interface should be different. -=- Proposal -=- interface IClassInterceptor // better name? { object Intercept( IInvocation invocation ); } interface IInvocation { object[] Arguments { get; set; } object Proxy { get; set; } object Proceed(); } Now the user, instead of using a IInvocationHandler, should use ProxyGenerator generator = new ProxyGenerator(); DefaultClassInterceptor interceptor = new DefaultClassInterceptor(); MyClass proxy = (MyClass) generator.CreateClassProxy( typeof(MyClass), handler ); Now we dont have separate instances. When a method is invoked on the proxy, the Intercept is invoked. If the user invoke the Invocation.Proceed, the proxy calls the super class to invoke the real implementation. How do you like that? -=- Under the hood -=- I've played for five minutes, so I'm not sure if this is the best approach, with the best performance, but it relies on delegates. class MyClassProxy : MyClass { ... delegate void __MyClass_DoSomething(int x); public override void DoSomething(int x) { MethodInfo m = MethodBase.GetMethodFromHandle( ldtoken method ); InvocationImpl invocation = new InvocationImpl( this, m, new __MyClass_DoSomething(callback__DoSomething), x ); interceptor.Intercept( invocation ); } private void callback__DoSomething(int x) { base.DoSomething(x); } } class InvocationImpl : IInvocation { public InvocationImpl( object proxy, MethodInfo m, delegate call, params object[] args ) { .. } public object Proceed() { call.DynamicInvoke( args ); } } Yes, it works! But before I start to code this beast we need to agree on these interfaces. Also, can we think of something similar to interface proxies? We're close to the first non-beta release and once this is release, change interfaces will hurt users, and we don't want that. -- Cheers, hammett http://www.digitalcraftsmen.com.br/~hammett |
From: hammett <ha...@uo...> - 2004-10-23 01:22:09
|
FIXED! Phew! And the WriteILForMethod now is even shorter. -- Cheers, hammett http://www.digitalcraftsmen.com.br/~hammett |
From: hammett <ha...@uo...> - 2004-10-22 22:09:52
|
Scary! I'll rewrite the WriteILForMethod today !!! Microsoft (R) .NET Framework PE Verifier Version 1.1.4322.573 Copyright (C) Microsoft Corporation 1998-2002. All rights reserved. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::ToString] [offset 0x0000002E] [opcode stloc] [found objref 'System.String'] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::ToString] [offset 0x0000003C] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected objref 'System.String'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Equals] [offset 0x0000004C] [opcode ldind.i4] [found address of SByte] [expected address of Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Equals] [offset 0x0000004D] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Equals] [offset 0x0000004D] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Equals] [offset 0x0000005B] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::GetHashCode] [offset 0x0000002F] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::GetHashCode] [offset 0x0000002F] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::GetHashCode] [offset 0x0000003D] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x0000006A] [opcode stloc] [found address of SByte] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x0000006A] [opcode stloc] [found address of SByte] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000078] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int64] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int64] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int64] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Double] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Double] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Double] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Double] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Double] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Double] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x0000006A] [opcode stloc] [found address of Int64] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x0000006A] [opcode stloc] [found address of Int64] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Sum] [offset 0x00000078] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int64] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::get_Valid] [offset 0x0000002E] [opcode ldind.i4] [found address of SByte] [expected address of Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::get_Valid] [offset 0x0000002F] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::get_Valid] [offset 0x0000002F] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::get_Valid] [offset 0x0000003D] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Subtract] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Subtract] [offset 0x00000069] [opcode stloc] [found Int32] [expected objref 'System.Reflection.MethodInfo'] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::Subtract] [offset 0x00000077] [opcode ret] [found objref 'System.Reflection.MethodInfo'] [expected Int32] Unexpected type on the stack. [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::GetObjectData] [offset 0x00000020] [opcode callvirt] fall thru end of the method [IL]: Error: [e:\dev\projects\digitalgravity\castle\trunk\tools\bin\generatedassembly.dll : ProxyTypeSpecializedServiceClass_ISerializable::GetObjectData] [HRESULT 0x80004005] - Unspecified error 45 Errors Verifying GeneratedAssembly.dll -- Cheers, hammett http://www.digitalcraftsmen.com.br/~hammett |
From: hammett <ha...@uo...> - 2004-10-22 21:16:18
|
Hiya, > I'm coming at this from a completely naive perspective. I thought the > DynamicProxy was just building a subclass of the class we are > proxying. Yes, that's exactly what it does. > So I don't understand why "this.SomeProperty" would refer > to the base class instead of the proxy class if "SomeProperty" was > virtual and public/protected. I'll have to look at that some more. You mean: callvirt will be used. It should, good point, so I wonder why my test case failed. :-( Meanwhile we're working on a non-public repository. Let me know if you want to have access and I send you (privately) login and password. -- Cheers, hammett http://www.digitalcraftsmen.com.br/~hammett |
From: Mike D. <mik...@gm...> - 2004-10-22 21:07:57
|
Hi hammet. That's quick. I'll keep an eye out for any announcements about new code locations :) I'm coming at this from a completely naive perspective. I thought the DynamicProxy was just building a subclass of the class we are proxying. So I don't understand why "this.SomeProperty" would refer to the base class instead of the proxy class if "SomeProperty" was virtual and public/protected. I'll have to look at that some more. Thanks again! Mike On Fri, 22 Oct 2004 17:15:51 -0700, hammett <ha...@uo...> wrote: > Ok, both fixed. The protected/internal/interal protected were bugs.. :-( > I'm working on the serialization issues pointed by Henry and a small release > should be available on Aspect# CVS tonight. > > But although its possible to generate stubs for non-public methods, they > need to be accessed with a proxy pointer (the this reference is not > proxied). > Cglib handles is gracefully - only God knows how - but I think it will be > amazingly difficult to tackle. Ideas? > > > > -- > Cheers, > hammett > http://www.digitalcraftsmen.com.br/~hammett > > ----- Original Message ----- > From: "hammett" <ha...@uo...> > To: <asp...@li...> > Sent: Friday, October 22, 2004 4:34 PM > Subject: Re: [Aspectsharp-users] DynamicProxy > > > Hello Mike, > > > > We're currently moving our codebase from ASF, so expect a different > > namespace. I antecipate my apologies! :-) > > > > Well, the public constructor isnt a problem, really. I think the > > requirement came from our lazyness. > > > > protected ConstructorBuilder GenerateConstructor() > > { > > ConstructorBuilder consBuilder = m_typeBuilder.DefineConstructor( > > MethodAttributes.Public, > > CallingConventions.Standard, > > new Type[] {typeof (IInvocationHandler)}); > > > > ILGenerator ilGenerator = consBuilder.GetILGenerator(); > > ilGenerator.Emit(OpCodes.Ldarg_0); > > ilGenerator.Emit(OpCodes.Call, m_baseType.GetConstructor(new Type[0])); > > ilGenerator.Emit(OpCodes.Ldarg_0); > > ilGenerator.Emit(OpCodes.Ldarg_1); > > ilGenerator.Emit(OpCodes.Stfld, m_handlerField); > > ilGenerator.Emit(OpCodes.Ret); > > > > return consBuilder; > > } > > > > I'll change the baseType.GetConstructor to be smarter. > > About the protected methods, I'd better write a test case before I answer > > that, but should not be a problem.... > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Aspectsharp-users mailing list > Asp...@li... > https://lists.sourceforge.net/lists/listinfo/aspectsharp-users > |
From: hammett <ha...@uo...> - 2004-10-22 20:16:11
|
Ok, both fixed. The protected/internal/interal protected were bugs.. :-( I'm working on the serialization issues pointed by Henry and a small release should be available on Aspect# CVS tonight. But although its possible to generate stubs for non-public methods, they need to be accessed with a proxy pointer (the this reference is not proxied). Cglib handles is gracefully - only God knows how - but I think it will be amazingly difficult to tackle. Ideas? -- Cheers, hammett http://www.digitalcraftsmen.com.br/~hammett ----- Original Message ----- From: "hammett" <ha...@uo...> To: <asp...@li...> Sent: Friday, October 22, 2004 4:34 PM Subject: Re: [Aspectsharp-users] DynamicProxy > Hello Mike, > > We're currently moving our codebase from ASF, so expect a different > namespace. I antecipate my apologies! :-) > > Well, the public constructor isnt a problem, really. I think the > requirement came from our lazyness. > > protected ConstructorBuilder GenerateConstructor() > { > ConstructorBuilder consBuilder = m_typeBuilder.DefineConstructor( > MethodAttributes.Public, > CallingConventions.Standard, > new Type[] {typeof (IInvocationHandler)}); > > ILGenerator ilGenerator = consBuilder.GetILGenerator(); > ilGenerator.Emit(OpCodes.Ldarg_0); > ilGenerator.Emit(OpCodes.Call, m_baseType.GetConstructor(new Type[0])); > ilGenerator.Emit(OpCodes.Ldarg_0); > ilGenerator.Emit(OpCodes.Ldarg_1); > ilGenerator.Emit(OpCodes.Stfld, m_handlerField); > ilGenerator.Emit(OpCodes.Ret); > > return consBuilder; > } > > I'll change the baseType.GetConstructor to be smarter. > About the protected methods, I'd better write a test case before I answer > that, but should not be a problem.... |
From: hammett <ha...@uo...> - 2004-10-22 19:35:04
|
Hello Mike, We're currently moving our codebase from ASF, so expect a different namespace. I antecipate my apologies! :-) Well, the public constructor isnt a problem, really. I think the requirement came from our lazyness. protected ConstructorBuilder GenerateConstructor() { ConstructorBuilder consBuilder = m_typeBuilder.DefineConstructor( MethodAttributes.Public, CallingConventions.Standard, new Type[] {typeof (IInvocationHandler)}); ILGenerator ilGenerator = consBuilder.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Call, m_baseType.GetConstructor(new Type[0])); ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.Emit(OpCodes.Stfld, m_handlerField); ilGenerator.Emit(OpCodes.Ret); return consBuilder; } I'll change the baseType.GetConstructor to be smarter. About the protected methods, I'd better write a test case before I answer that, but should not be a problem.... -- Cheers, hammett http://www.digitalcraftsmen.com.br/~hammett ----- Original Message ----- From: "Mike Doerfler" <mik...@gm...> To: <asp...@li...> Sent: Friday, October 22, 2004 12:12 PM Subject: [Aspectsharp-users] DynamicProxy > Hi guys. Before I ask my question I just want to say good job on the > work so far! I'm working on getting Dynamic Proxying working with > NHibernate and so far so good. > > One of the things I'm running into is that for a Class to be proxyable > the ctor has to be public and the properties/methods have to be > virtual and public. The virtual requirement makes sense - can't > override a non virtual method. Is there any reason that the > constructor and properties/methods with an access level of protected > can't be proxied? It looks like a relatively small code change in > BaseCodeGenerator but since it looked small there has to be something > else to it :) > > Thanks and keep up the good work! > > Mike > > |
From: Mike D. <mik...@gm...> - 2004-10-22 19:12:46
|
Hi guys. Before I ask my question I just want to say good job on the work so far! I'm working on getting Dynamic Proxying working with NHibernate and so far so good. One of the things I'm running into is that for a Class to be proxyable the ctor has to be public and the properties/methods have to be virtual and public. The virtual requirement makes sense - can't override a non virtual method. Is there any reason that the constructor and properties/methods with an access level of protected can't be proxied? It looks like a relatively small code change in BaseCodeGenerator but since it looked small there has to be something else to it :) Thanks and keep up the good work! Mike |
From: hammett <ha...@uo...> - 2004-10-20 20:36:44
|
Its been such a crazy week! Yes, I think you got a point. I'll make some test cases to validate this = use=20 case, then we can think about some possibilites that will arise. Cheers hammett ----- Original Message -----=20 From: "Henry Concei=E7=E3o" <hen...@gm...> To: <asp...@li...> Sent: Tuesday, October 19, 2004 1:20 PM Subject: [Aspectsharp-users] Proxy Serialization Hi, I was looking how serialize/deserialize the proxieds objects generated by a#, and the simplest thing that I thought is to implement the ISerializable interface on each generated proxy (or only for the types marked with the [SerializableAttribute] or wich implements the ISerializable interface). They'll point to a ProxySerializationHelper, or something like that, to handles the deserialization(rebuilding the proxy with the expecteds interfaces, mixins, etc), so that way we'll only need to serialize some fields. But looking the fields, I found some issues: - The mixins, generally, has a field 'object proxy', who can't be serialized. How to recover the state of this field after the serialization? I thought in (re)invoke the SetProxy method. - The target object is encapsulated by the InvocationHandler, who contains others fields like AspectDefinition, Matchers, etc. Serialize only the target and reconstruct the the InvocationHandler in deserialization? Or serialize the InvocationHandler(except the AspectEngine field) and all the aspects? - How to recover the correct AspectEngine instance? Thoughts? Others strategies? --=20 Cheers, Henry Concei=E7=E3o ------------------------------------------------------- This SF.net email is sponsored by: IT Product Guide on ITManagersJournal Use IT products in your business? Tell us what you think of them. Give us Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out mo= re http://productguide.itmanagersjournal.com/guidepromo.tmpl _______________________________________________ Aspectsharp-users mailing list Asp...@li... https://lists.sourceforge.net/lists/listinfo/aspectsharp-users=20 |
From: <hen...@gm...> - 2004-10-19 20:20:16
|
Hi, I was looking how serialize/deserialize the proxieds objects generated by a#, and the simplest thing that I thought is to implement the ISerializable interface on each generated proxy (or only for the types marked with the [SerializableAttribute] or wich implements the ISerializable interface). They'll point to a ProxySerializationHelper, or something like that, to handles the deserialization(rebuilding the proxy with the expecteds interfaces, mixins, etc), so that way we'll only need to serialize some fields. But looking the fields, I found some issues: - The mixins, generally, has a field 'object proxy', who can't be serialized. How to recover the state of this field after the serialization? I thought in (re)invoke the SetProxy method. - The target object is encapsulated by the InvocationHandler, who contains others fields like AspectDefinition, Matchers, etc. Serialize only the target and reconstruct the the InvocationHandler in deserialization? Or serialize the InvocationHandler(except the AspectEngine field) and all the aspects? - How to recover the correct AspectEngine instance? Thoughts? Others strategies? --=20 Cheers, Henry Concei=E7=E3o |
From: Rafael S. <raf...@gm...> - 2004-10-18 18:11:17
|
Yeah, loggin is a weak solution, even because I don't think that the need for a logging library as dependency for a# is good. Seems like we don't have too many options but thow an exception .. Rafael On Mon, 18 Oct 2004 14:54:05 -0700, hammett <ha...@uo...> wrote: > I think that neither logging nor documentation is the solution. I'm in favor > of raising a nice and clean exception if non-virtual methods are found. > > Why: > > - People apparently don't read the docs (we dont read them either :-)) > - Logging can be easily ignored or even uncatched > > What do you think? > > Cheers > hammett > |
From: hammett <ha...@uo...> - 2004-10-18 17:54:30
|
I think that neither logging nor documentation is the solution. I'm in favor of raising a nice and clean exception if non-virtual methods are found. Why: - People apparently don't read the docs (we dont read them either :-)) - Logging can be easily ignored or even uncatched What do you think? Cheers hammett ----- Original Message ----- From: "Rafael Steil" <raf...@gm...> To: <asp...@li...> Sent: Friday, October 15, 2004 8:03 AM Subject: Re: [Aspectsharp-users] Proxy generation and non-virtual methods > Just ignoring the method smells like a strong and cruel decision.. > Some logging is not an option? Otherwise, this is the kind of > assumption that must be very clear in the documentation. > > Rafael > > hammett wrote: > >> Hello folks, >> >> I think this is a big big problem. Lets see an example of some pseudo >> code: >> >> class A >> int value; >> >> A() >> value = 0 >> end >> >> virtual void method1() >> value++ >> end >> >> void method2() >> value++ >> end >> >> virtual int getValue1() >> return value >> end >> >> int getValue2() >> return value >> end >> end >> >> >> A a = AspectEngine.Wrap( new A() ); >> a.method1() >> a.method2() >> a.method1() >> >> Console.Out.Println( a.getValue1() ) >> Console.Out.Println( a.getValue2() ) >> >> -- What do you think is going to be outputed? >> >> The underlying question is: shall we ignore non-virtual methods during >> proxy generation? >> >> >> Cheers, >> hammett >> > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Aspectsharp-users mailing list > Asp...@li... > https://lists.sourceforge.net/lists/listinfo/aspectsharp-users |
From: Rafael S. <raf...@gm...> - 2004-10-15 15:04:33
|
Just ignoring the method smells like a strong and cruel decision.. Some logging is not an option? Otherwise, this is the kind of assumption that must be very clear in the documentation. Rafael hammett wrote: > Hello folks, > > I think this is a big big problem. Lets see an example of some pseudo code: > > class A > int value; > > A() > value = 0 > end > > virtual void method1() > value++ > end > > void method2() > value++ > end > > virtual int getValue1() > return value > end > > int getValue2() > return value > end > end > > > A a = AspectEngine.Wrap( new A() ); > a.method1() > a.method2() > a.method1() > > Console.Out.Println( a.getValue1() ) > Console.Out.Println( a.getValue2() ) > > -- What do you think is going to be outputed? > > The underlying question is: shall we ignore non-virtual methods during proxy generation? > > > Cheers, > hammett > |
From: hammett <ha...@uo...> - 2004-10-15 03:12:05
|
Hello folks, I think this is a big big problem. Lets see an example of some pseudo code: class A int value; A() value = 0 end virtual void method1() value++ end void method2() value++ end virtual int getValue1() return value end int getValue2() return value end end A a = AspectEngine.Wrap( new A() ); a.method1() a.method2() a.method1() Console.Out.Println( a.getValue1() ) Console.Out.Println( a.getValue2() ) -- What do you think is going to be outputed? The underlying question is: shall we ignore non-virtual methods during proxy generation? Cheers, hammett |
From: hammett <ha...@uo...> - 2004-10-15 02:57:51
|
Hello Leo, It was easy to track the problem, your class must expose virtual methods = to=20 be intercepted. It will be a really complex situation if you wrap a concr= ete=20 class with some virtual methods and some non-virtual. This ought to be=20 documented in the caveats section in the documentation http://aspectsharp.sourceforge.net/doc_aspectengine.html The best way is to use interface and wrap interfaces (see the docs). But = in=20 your case, just mark all methods as virtual and all will be fine. Cheers! hammett ----- Original Message -----=20 From: "Wang Yu (Sh)" <Leo...@gr...> To: "hammett" <ha...@uo...> Sent: Thursday, October 14, 2004 7:47 PM Subject: re: Aspect# Hi,hammett: Thanks for your reply! And an little project is attached in this mail. Th= ere=20 are only three simple classes in this project, the first is Entiy which=20 should be intercepted; the second is MethodInterceptor which is designed = to=20 intercept the method MethodSample of Entiy; and the last one is Class1 to= =20 run this case. everything seems ok, except the interceptor can no be "bou= nd"=20 to the Entiy. Thanks for yours viewing of my code, and hope for your reply. Best wishes, Yours leo -----=D3=CA=BC=FE=D4=AD=BC=FE----- =B7=A2=BC=FE=C8=CB: hammett [mailto:ha...@uo...] =B7=A2=CB=CD=CA=B1=BC=E4: 2004=C4=EA10=D4=C215=C8=D5 02:32 =CA=D5=BC=FE=C8=CB: Wang Yu (Sh) =B3=AD=CB=CD: asp...@li... =D6=F7=CC=E2: Aspect# Hello Leo, You've published the follow comment on my blog: " hi, thanks for your great job! I just downloaded the Aspect# from Sourceforge, and tasted it:) the Mixin works well but the Interceptor I wrote can not run on the right way... ev= en the config script was copied from the sample code. would you please tell = me the email of you and help me to solve this issue? I will send you the sou= rce code I wrote. Thanks in advance!!! " Well, what's wrong. Can you please post the source code on this list? Cheers hammett |
From: hammett <ha...@uo...> - 2004-10-14 14:32:12
|
Hello Leo, You've published the follow comment on my blog: " hi, thanks for your great job! I just downloaded the Aspect# from Sourceforge, and tasted it:) the Mixin works well but the Interceptor I wrote can not run on the right way... even the config script was copied from the sample code. would you please tell me the email of you and help me to solve this issue? I will send you the source code I wrote. Thanks in advance!!! " Well, what's wrong. Can you please post the source code on this list? Cheers hammett |
From: hammett <ha...@uo...> - 2004-10-13 21:44:48
|
Yup, pretty strange. At first I had tested with nant -t::mono-1.0 and everything was fine. Compiling with 'mono nant.exe' crashes during test execution, and compiling with .net and running the test cases with mono nunit-console.exe also crashes. This is really something... Well, I'll keep digging it. Thanks dude. Cheers, hammett ----- Original Message ----- From: "Martijn Boland" <ma...@bo...> To: "hammett" <ha...@uo...> Sent: Wednesday, October 13, 2004 1:20 PM Subject: Re: Mono build > Hi hammett > >> Well, I had to hard code the configurations on NAnt.exe.config and then >> it >> worked fine. The dynamic proxy compilation have issue no warning and the >> test cases ran allright, provided that nant correctly ran everything with >> mono execs. > > Pff, you can say so. NAnt config with mono on win32 is a mess. But I > managed to get a > build with mono and win32 by copying the values of the 1.0.2 mono registry > key to a 1.0 > key and setting the project config to 'release'. > >> So things seems to be ok here. I hope you give it another try with mono >> 1.0.2 > > Not here, unfortunately. The very same result as when building on > mono-unix (on win32 you > get a fancier messagebox though :)). I do have a screenshot of it, but my > webmail crashes > with attachments. > Are you sure you really built it with mono? Like 'mono > MONO_NANT_BIN_DIR\NAnt.exe'? > > Martijn > > |
From: hammett <ha...@uo...> - 2004-10-13 16:44:02
|
Hello Martijn (cc'ing aspectsharp list just for the records) Well, I had to hard code the configurations on NAnt.exe.config and then it worked fine. The dynamic proxy compilation have issue no warning and the test cases ran allright, provided that nant correctly ran everything with mono execs. So things seems to be ok here. I hope you give it another try with mono 1.0.2 Cheers hammett ----- Original Message ----- From: "Martijn Boland" <ma...@bo...> To: "hammett" <ha...@uo...> Sent: Wednesday, October 13, 2004 9:26 AM Subject: Re: Mono build > Hi hammett > >> I've installed the cygwin and mono under windows, but nant still can't >> detect the mono installation. I've installed the Mono-1.0.2. Do you know >> what possible can be wrong? > > Hmmm, dont't know what's wrong. I use Mono on Linux, but tonight I'll give > Mono on Win32 a try. I'll let you know if I can get it to work. > > Martijn > |
From: hammett <ha...@uo...> - 2004-10-12 22:24:02
|
Hello, Martijn The usage of ldtoken is so simple that we'd presumed that it would run without any problem on mono. I'll contact the mono people right now to get this thing working. Cheers, hammett ----- Original Message ----- From: "Martijn Boland" <ma...@bo...> To: <asp...@li...> Sent: Tuesday, October 12, 2004 3:03 PM Subject: [Aspectsharp-users] DynamicProxy on Mono > Hi all > > I'm trying to get NHibernate with dynamic proxies to work on Mono but it > doesn't run. this > is the error I get: > > ** ERROR **: file class.c: line 2820 (mono_ldtoken): should not be reached > > Then I tried to build and test Avalon DynamicProxy from the SVN repository > with the same > result. > > Does anybody have DynamicProxy running on Mono and, if so, what Mono > version are you using > or are there any special steps to take? Currently, I'm using Mono 1.0.1. > > Thanks, > > Martijn > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Aspectsharp-users mailing list > Asp...@li... > https://lists.sourceforge.net/lists/listinfo/aspectsharp-users > |
From: Martijn B. <ma...@bo...> - 2004-10-12 22:03:16
|
Hi all I'm trying to get NHibernate with dynamic proxies to work on Mono but it doesn't run. this is the error I get: ** ERROR **: file class.c: line 2820 (mono_ldtoken): should not be reached Then I tried to build and test Avalon DynamicProxy from the SVN repository with the same result. Does anybody have DynamicProxy running on Mono and, if so, what Mono version are you using or are there any special steps to take? Currently, I'm using Mono 1.0.1. Thanks, Martijn |
From: hammett <ha...@uo...> - 2004-10-11 19:49:01
|
I think you forgot to cc the list :-) ----- Original Message -----=20 From: "Henry Concei=E7=E3o" <hen...@gm...> To: "hammett" <ha...@uo...> Sent: Wednesday, October 06, 2004 3:55 PM Subject: Re: [Aspectsharp-users] Next Iteration inlines On Wed, 6 Oct 2004 17:46:39 -0700, hammett <ha...@uo...> wrote: > Well, =CF'm not really sure about a formal to do list. We need to discu= ss a > few topics, though: > > - AOPAlliance > > Provide this compatibility is nice for our users, but I must say that t= he > AopAlliance interfaces are not well defined. A few changes could help u= s=20 > to > achieve better performance We can propose the changes to the AOPAlliance, but I think that the interfaces don't will be modified soo easy... > > - Semantic checking > > The semantic check is not checking if the custom matcher actually=20 > implements > the IClassMatcher interface cause this would lead us to a cyclic assemb= ly > references. What do you think about moving the important interfaces to=20 > other > assembly? This could solve this problem but introduce more aggravations= to > our users. Today an assembly have to refer the AspectSharp assembly and/or the AopAlliance Assembly. I was thinking in something like "Nunit.Framework assembly" , but the AspectEngine can't be moved in a simple way. > > - Caching > > There are lots of points in the code that will benefit from caching. To= day > Aspect# performance is far from a Good Enough. I haven't spent much tim= e > thinking about caching, though. You could come up with a few strategies= . I promise think about. > > This is the list off top of my head, I'm sure there are plenty more top= ics > to be covered... > > Cheers, > hammett > > > > ----- Original Message ----- > From: "Henry Concei=E7=E3o" <hen...@gm...> > To: <asp...@li...> > Sent: Wednesday, October 06, 2004 1:20 PM > Subject: [Aspectsharp-users] Next Iteration > > Hammett, could you send to us the TODO list? > > And what you guys think about start the refactoring of the Interceptor > Model? > > -- > Cheers, > Henry Concei=E7=E3o > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJourna= l > Use IT products in your business? Tell us what you think of them. Give = us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out=20 > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Aspectsharp-users mailing list > Asp...@li... > https://lists.sourceforge.net/lists/listinfo/aspectsharp-users > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJourna= l > Use IT products in your business? Tell us what you think of them. Give = us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out=20 > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Aspectsharp-users mailing list > Asp...@li... > https://lists.sourceforge.net/lists/listinfo/aspectsharp-users > --=20 Cheers, Henry Concei=E7=E3o=20 |
From: hammett <ha...@uo...> - 2004-10-10 14:32:37
|
http://www.theserverside.net/news/thread.tss?thread_id=28218 :-) |
From: hammett <ha...@uo...> - 2004-10-06 20:47:39
|
Well, =CF'm not really sure about a formal to do list. We need to discuss= a few topics, though: - AOPAlliance Provide this compatibility is nice for our users, but I must say that the AopAlliance interfaces are not well defined. A few changes could help us = to achieve better performance - Semantic checking The semantic check is not checking if the custom matcher actually impleme= nts the IClassMatcher interface cause this would lead us to a cyclic assembly references. What do you think about moving the important interfaces to ot= her assembly? This could solve this problem but introduce more aggravations t= o our users. - Caching There are lots of points in the code that will benefit from caching. Toda= y Aspect# performance is far from a Good Enough. I haven't spent much time thinking about caching, though. You could come up with a few strategies. This is the list off top of my head, I'm sure there are plenty more topic= s to be covered... Cheers, hammett ----- Original Message ----- From: "Henry Concei=E7=E3o" <hen...@gm...> To: <asp...@li...> Sent: Wednesday, October 06, 2004 1:20 PM Subject: [Aspectsharp-users] Next Iteration Hammett, could you send to us the TODO list? And what you guys think about start the refactoring of the Interceptor Model? -- Cheers, Henry Concei=E7=E3o ------------------------------------------------------- This SF.net email is sponsored by: IT Product Guide on ITManagersJournal Use IT products in your business? Tell us what you think of them. Give us Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out mo= re http://productguide.itmanagersjournal.com/guidepromo.tmpl _______________________________________________ Aspectsharp-users mailing list Asp...@li... https://lists.sourceforge.net/lists/listinfo/aspectsharp-users |