Я пытаюсь использовать безопасный с точки зрения типов WeakReference в своем приложении Silverlight. Я следую рецепту на этом сайте: http://ondevelopment.blogspot.com/2008/01/generic-weak-reference.html только с помощью Системы. WeakReference и исключение материала та ссылочная Сериализация.
Это бросает ReflectionTypeLoadException, когда я пытаюсь выполнить его с этим сообщением:
"{Система. TypeLoadException: правила безопасности Наследования, нарушенные, в то время как переопределяющий участник: 'Coatue. Silverlight. Общий. Кэш. WeakReference '1.. ctor ()'. Доступность безопасности метода переопределения должна соответствовать доступности безопасности переопределяемого метода.}"
Какие-либо предложения?
Править: Вот код, который я использую:
using System;
namespace Frank
{
public class WeakReference
: WeakReference where T : class
{
public WeakReference(T target)
: base(target) { }
public WeakReference(T target, bool trackResurrection)
: base(target, trackResurrection) { }
protected WeakReference() : base() { }
public new T Target
{
get
{
return (T)base.Target;
}
set
{
base.Target = value;
}
}
}
}
Как упоминал Томас, вы не можете наследовать от слабой ссылки в silverlight, но вы можете обернуть его:
using System;
namespace Frank
{
public class WeakReference<T> where T : class
{
private readonly WeakReference inner;
public WeakReference(T target)
: this(target, false)
{ }
public WeakReference(T target, bool trackResurrection)
{
if(target == null) throw new ArgumentNullException("target");
this.inner = new WeakReference(target, trackResurrection);
}
public T Target
{
get
{
return (T)this.inner.Target;
}
set
{
this.inner.Target = value;
}
}
public bool IsAlive {
get {
return this.inner.IsAlive;
}
}
}
}
Существует требование наследования для класса WeakReference
, а среда выполнения Silverlight не имеет необходимых разрешений. Поэтому вы не можете наследовать WeakReference
в Silverlight...
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]