2012-05-08 1 views
0

Я использую фреймворк SharpObservation, чтобы динамически генерировать слабые ссылки на события. Когда я ссылаюсь на действие из делегата, я получаю исключение TypeAccessException.Динамически сгенерированный слабый случай недействителен для действия <T> звонки

Попытка методом 'DynamicClass.Construct (System.EventHandler XYZ > >, System.Delegate)', чтобы получить доступ к типу 'System.Action3c__DisplayClass6, System.Object, XYZ>' не удалось.

Если я удалю действие, все будет работать нормально. Я даже пробовал комментировать весь элемент действия, и он все еще терпит неудачу. Я считаю, что это имеет какое-то отношение к создаваемому компилятором методу из действия, является частным или внутренним или чем-то таким, что к нему нельзя получить доступ извне. Как мне обойти это?

Action eventCompleted =() => 
    { 
     SomeMethod(); 
    }; 

    EventHandler<XYZ> eventDelegate = delegate 
    {   
     System.Windows.Application.Current.Dispatcher.BeginInvoke(eventCompleted); 
    }; 

    newItem.Event += eventDelegate.MakeWeak(); 

ответ

0

Мне пришлось изменить источник, чтобы не выполнять проверки доступа JIT. С этим связаны некоторые проблемы с безопасностью. (Добавлен истинный параметр)

var dynamicMethod = new DynamicMethod("Construct", typeof(TDelegate), args, true);