sorry. your correction is correct :)

Why do u need to put code in the attribute?
Might be helpful if u post some code?

On Sun, Apr 24, 2011 at 9:20 PM, Hendry Luk <[email protected]> wrote:
> 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

-- 
--
mono-cecil

Reply via email to