Зависимости объектов / свойств из DLL - PullRequest
0 голосов
/ 07 ноября 2011

Вот код, который у меня есть:

public class MyObject : DependencyObject
{
    public int speedSimu
    {
        get { return (int)GetValue(speedSimuProperty); }
        set { SetValue(speedSimuProperty, value); }
    }

    public static readonly DependencyProperty speedSimuProperty =
        DependencyProperty.Register("speedSimu", typeof(int), typeof(MyObject), new PropertyMetadata(0));

    public int Value
    {
        get;
        set;
    }
}


public class Timer : DependencyObject
{
    public string description
    {
        get { return (string)GetValue(descriptionProperty); }
        set { SetValue(descriptionProperty, value); }
    }

    public static readonly DependencyProperty descriptionProperty =
        DependencyProperty.Register("description", typeof(string), typeof(Timer), new PropertyMetadata("This is a timer"));

}

public class AnotherClass
{

}

public class Test
{
    MyObject q1 = new MyObject();
    MyObject q2 = new MyObject();
    MyObject q3 = new MyObject();
    MyObject q4 = new MyObject();

    Timer t1 = new Timer();
    Timer t2 = new Timer();
    Timer t3 = new Timer();

    AnotherClass a1 = new AnotherClass();
    AnotherClass a2 = new AnotherClass();
    AnotherClass a3 = new AnotherClass();
}

Я генерирую DLL из этого кода, и вот что я хочу сделать: - только получать экземпляры (== игнорировать все классы, кроме "test"): ОК - фильтр DependencyObjects: ОК - фильтр DependencyProperties: не в порядке - доступ к информации, чтобы я мог получить именно то, что я хочу (я не хочу больше ничего):

#

q1 int speedSimu: 0 q2 int speedSimu: 0 q3 int speedSimu: 0 q4 int speedSimu: 0

t1 Строка описания: «Это таймер» t2 Строка описания: «Это таймер»

#

(Обратите внимание, что! DependecyProperties игнорируются)

Код, который у меня есть на данный момент:

var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();

foreach (Type type in types)
{
     var lib = Activator.CreateInstance(type);             
     Type myType = lib.GetType();

     //This filters my Class Test. Not elegant but not my main problem at the moment.
     if (myType.BaseType.ToString() == "System.Object")
     {
         FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance);

         foreach (FieldInfo field in fields)
         {
             var fieldtype = field.FieldType;

             if (typeof(DependencyObject).IsAssignableFrom(fieldtype))
             {
                  //Here I am !
             }
         }
     }             
 }

Дело в том, что на данный момент, я думаю, я близок к концу, но мне кажется, что, как и в «FieldInfos», информация о MyObject и Timer теряется (я имею в виду свойства / поля и их значения ..) .) но я не знаю, как это сделать по-другому ... Я действительно заблокирован здесь и не знаю, что делать дальше ...

...