Xamarin Public Jenkins (auto-signing) e79aa3c0ed Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
2016-08-03 10:59:49 +00:00

53 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//------------------------------------------------------------------------------
// <copyright file="SystemWebProxy.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
namespace System.Web.Util {
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Web.Security;
using System.Security.Permissions;
// Because this assembly ships in the client SKU, whereas System.Web.dll ships in the Extended SKU, we need to
// proxy any usage of System.Web.dll. This allows us to fail gracefully if the Extended SKU is not present.
// Users can avoid this failure by overridding all virtual members on both of these types which will prevent
// this class, and hence, System.Web.dll, from ever being called.
internal static class SystemWebProxy {
public static readonly IMembershipAdapter Membership = GetMembershipAdapter();
private static IMembershipAdapter GetMembershipAdapter() {
IMembershipAdapter membership = CreateSystemWebMembershipAdapter();
if (membership == null) {
membership = new DefaultMembershipAdapter();
}
return membership;
}
private static IMembershipAdapter CreateSystemWebMembershipAdapter() {
Type type = Type.GetType("System.Web.Security.MembershipAdapter, " + AssemblyRef.SystemWeb, throwOnError:false);
if (type != null) {
// Running on Extended SKU
return (IMembershipAdapter)DangerousCreateInstance(type);
}
// Running on Client SKU
return null;
}
// Partially trusted callers might not have permissions to create an instance of
// System.Webs MembershipAdapter type (its an internal type), so give them access.
[ReflectionPermission(SecurityAction.Assert, Flags=ReflectionPermissionFlag.MemberAccess)]
private static object DangerousCreateInstance(Type type) {
return Activator.CreateInstance(type);
}
}
}