3

I apologize in advance if this gets a little convoluted.

I have an attribute class like so:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class RepositoryCollectionMethodAttribute : Attribute
{
    public string MethodName { get; set; }
    public RepositoryCollectionMethodAttribute(string methodName)
    {
        MethodName = methodName;
    }
}

I am traversing my class domain using EnvDTE, collecting classes for code generation. Finding a class that decorates one or more properties with the RepositoryCollectionMethod.

This part was relatively easy, so for each class with some of these properties decorated, I now have an IEnumerable<CodeProperty> I call properties.

Now I'm stuck. Due to the nature of these EnvDTE objects (which seem to have an aversion to strong typing and good documentation/ examples) I cannot figure out how to extract a distinct list of MethodName property values from the collection of properties, at least one of which will have a RepositoryCollectionMethod decorating it.

In other words, if I have a class `Foo' like this:

public class Foo
{
    public Guid FooId { get; set; }

    [RepositoryCollectionMethod("GetFoosByCategory")]
    public string Category { get; set; }

    [RepositoryCollectionMethod("GetFoosByClass")]
    [RepositoryCollectionMethod("GetFoosByClassAndLot")]
    public string Class { get; set; }

    [RepositoryCollectionMethod("GetFoosByLot")]
    [RepositoryCollectionMethod("GetFoosByClassAndLot")]
    public string Lot { get; set; }

}

...given an IEnumerable<CodeProperty> of Foo's properties, I would like to generate the following list:

  • GetFoosByCategory
  • GetFoosByClass
  • GetFoosByClassAndLot
  • GetFoosByLot

Can anyone help me with this?

Jeremy Holovacs
  • 22,480
  • 33
  • 117
  • 254

0 Answers0