Существует не особенность, как, что, насколько я знаю, - вы можете реализовать его в качестве метода расширения, который оборачивает Demand
, что-то вроде этого:
public static class IPermissionExtensions
{
public static bool TryDemand(this IPermission permission)
{
try
{
permission.Demand();
}
catch (SecurityException e)
{
return false;
}
return true;
}
}
Вы могли бы использовать его как это:
if (somePermission.TryDemand())
{
// ...
}
Единственная проблема с этим методом заключается в том, что улавливание исключений может быть медленным, особенно если вы постоянно требуете разрешений в своем коде.
Решение этой проблемы заключается в том, чтобы предварительно загрузить все требования безопасности сразу после запуска приложения и сохранить результаты для последующего поиска. Нечто похожее на это:
public class PermissionManager
{
private Dictionary<IPermission, bool> permissions;
public PermissionManager(IEnumerable<IPermission> permissions)
{
foreach (var permission in permissions)
{
this.permissions.Add(permission, permission.TryDemand());
}
}
public bool HasPermission(IPermission permission)
{
bool value;
if (permissions.TryGetValue(permission, out value))
return value;
else
return false;
}
}
Нет, увы. Вы можете декомпилировать его сами, чтобы увидеть: это в mscorlib. – Rup
Нет, его опубликованный интерфейс и не содержит такого метода, кроме того, ожидание заключается в том, что Demand будет метаться, если это требование не выполняется. –
[StackOverFlow Previouis Posting] (http://stackoverflow.com/questions/2498787/implementing-ipermission) – MethodMan