Yes, I'm able to get the metadata of the attributes. But i need to
instantiate it because I do implement the behavior inside of the attribute
for extensibility reason.
I guess mono-cecil is strictly behaving like .net assembly in the
reflection-only mode (although the .net one is even more limited since you
can't even inspect attribute at all, AFAIK).

*The thing u can do with cecil is instantiate and instance of those
> attributes at runtime.*
>

Did you mean "you can't"?

Cheers

On Sun, Apr 24, 2011 at 5:26 PM, Simon Cropp <[email protected]> wrote:

> Hendry
>
> Just to be clear Cecil can read attributes and you can even extract
> out properties and constructor parameters.
> The thing u can do with cecil is instantiate and instance of those
> attributes at runtime. You would have to switch back to standard
> reflection to do that.
>
> So what does this mean for you... Just dont write code in your
> attributes and you will be fine. Use Attributes soley for "metadata"
> then have another class that does something with that metadata.
>
> For example I have an attribute like this
>
> public class NotifyPropertyAttribute : Attribute
> {
>    public bool PerformEqualityCheck { get; set; }
>    public string[] AlsoNotifyFor { get; set; }
> }
>
> At weaving time I extract the PerformEqualityCheck property using this code
>
> static bool? GetCheckForEquality(CustomAttribute notifyAttribute)
> {
>        var performEqualityCheck =
> notifyAttribute.Properties.FirstOrDefault(x => x.Name ==
> "PerformEqualityCheck");
>        var equalityCheckValue = performEqualityCheck.Argument.Value;
>        if (equalityCheckValue != null)
>        {
>                return (bool)equalityCheckValue;
>        }
>        return null;
> }
>
> Would this approach meet your requirements?
>
>
> On Sun, Apr 24, 2011 at 12:52 PM, Hendry Luk <[email protected]> wrote:
> > Thanks for the response, Jb.
> > I was speculating there might be a way to convert (i.e. load) from cecil
> > object models into the .net runtime.
> > I use cecil because the main business my application does is weaving
> > assemblies (AOP), and unfortunately in few places I often need to read
> > attribute metadata to control the weaving behavior.
> > I guess I will need to use both .net reflection and cecil for this, and
> > somehow swap back and forth between them. Efficiency was my concern.
> >
> > Thanks again
> >
> > On Sun, Apr 24, 2011 at 5:55 AM, Jb Evain <[email protected]> wrote:
> >>
> >> Hi,
> >>
> >> On Sat, Apr 23, 2011 at 9:30 PM, Hendry Luk <[email protected]>
> wrote:
> >> > Hi,
> >> > Is there any easy way in cecil to get a certain custom-attributes (of
> a
> >> > specific type) from a method, and execute a virtual method on it?
> >> > Just like it can easily be done using a basic System.Reflection.
> >> >
> >> > The only way i can think of is to manually load the assembly
> containing
> >> > that
> >> > attributes (that I've discovered using cecil), then instantiate the
> >> > attribute using the constructor-arguments information (from cecil),
> and
> >> > then
> >> > copy across all property-values (from cecil). Once you got the
> attribute
> >> > instance, I can then execute the method. It seems to be a lot of work
> >> > for
> >> > such a _very_ common thing.
> >>
> >> .net attributes have been designed to be instantiated at runtime.
> >> Cecil is not a runtime feature, it just gives you an object model
> >> which maps to the serialized metadata. Cecil has obviously no way to
> >> instantiate an object based on this metadata.
> >>
> >> If you want to instantiate attributes, you're looking at the wrong tool.
> >>
> >> > Oh while I'm here, is there also an easy way to do
> >> > type.IsAssignableFrom(type) on cecil? At the moment i'm recursively
> >> > checking
> >> > all the base-classes within its ancestry line, as well as their
> >> > interfaces,
> >> > but it feels very inefficient, considering it's also a very common
> thing
> >> > (checking for types assignability is probably far more common than
> >> > checking
> >> > for an exact equality). Is there a better way to do this?
> >>
> >> Not really, I don't think I have such a method around.
> >>
> >> Jb
> >>
> >> --
> >> --
> >> mono-cecil
> >
> > --
> > --
> > mono-cecil
>
> --
> --
> mono-cecil

-- 
--
mono-cecil

Reply via email to