Как загрузить UserControl в WPF с отражением? - PullRequest
1 голос
/ 21 августа 2010
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var assm = Assembly.LoadFrom("wpflib.dll");
    foreach (var t in assm.GetTypes())
    {
        var i = t.GetInterface("test.ILib");
        if (i != null)
        {
            var tmp = Activator.CreateInstance(typeof(UserControl)) as UserControl;
            this.stackPanel1.Children.Add(tmp);
        }
    }
}

tmp (UserControl1 в wpflib.dll) содержит только метку и текстовое поле.

Windows1 (test.exe) ссылается на ILib.dll и содержит только stackPanel1.

Но почему в Windows1 нет ничего (stackPanel1)?

1 Ответ

3 голосов
/ 21 августа 2010

Вы вообще не создаете экземпляр типа из DLL. Вместо:

var tmp = Activator.CreateInstance(typeof(UserControl)) as UserControl;

запись:

var tmp = Activator.CreateInstance(t) as UserControl;

Кроме того, я бы порекомендовал вам на самом деле написать

var tmp = (UserControl) Activator.CreateInstance(t);

вместо этого. В противном случае, если у вас есть ошибка, позже вы получите исключение null-reference, которое не очень информативно и сложно отладить. Таким образом, вы получите более значимое исключение приведения типов в нужном месте, где на самом деле происходит ошибка.

...