/// <summary> /// Initializes this provider's base settings. /// </summary> /// <param name="name"></param> /// <param name="config"></param> public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { base.Initialize(name, config); IsObsolete = config.GetBooleanValue("IsObsolete", false); SaltModifier = config.GetStringValue("SaltModifier", null); //none by default. }
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { if (config == null) { throw new ArgumentNullException("config"); } if (String.IsNullOrEmpty(name)) { name = "EFMembership"; } config.Remove("description"); config.Add("description", "Ado.net Entity Framework Membership Provider"); base.Initialize(name, config); TablePrefix = config.GetStringValue("tablePrefix", ""); UserMembershipProvider = config.GetStringValue("membershipProvider", string.Empty); MembershipProvider membership; if (string.IsNullOrWhiteSpace(UserMembershipProvider)) { membership = Membership.Provider; } else { membership = Membership.Providers[UserMembershipProvider]; } if (membership == null) { throw new ProviderException("Membership_provider_not_found".Resource()); } var memType = membership.GetType(); #if USE_WEBMATRIX var memDefType = typeof(EFMembershipProvider <, ,>); #else var memDefType = typeof(EFMembershipProvider <,>); #endif var tmpType = memType; var isType = false; while (tmpType != null) { var myTmp = default(Type); if (tmpType.IsGenericType) { myTmp = tmpType.GetGenericTypeDefinition(); } else { myTmp = tmpType; } if (myTmp.IsSubclassOf(memDefType)) { isType = true; break; } if (myTmp.IsAssignableFrom(memDefType)) { isType = true; break; } if (myTmp.IsInstanceOfType(memDefType)) { isType = true; break; } if (myTmp == memDefType) { isType = true; break; } tmpType = tmpType.BaseType; } if (!isType) { throw new ProviderException("Membership_provider_must_be_type_of_EFMembershipProvider".Resource()); } //if (memDefType.Module != memType.Module) // throw new ProviderException("Membership_provider_must_be_type_of_EFMembershipProvider".Resource()); //if (!memDefType.Name.Equals(memType.Name)) // throw new ProviderException("Membership_provider_must_be_type_of_EFMembershipProvider".Resource()); string temp = config["connectionStringName"]; if (temp == null || temp.Length < 1) { throw new ProviderException("Connection_name_not_specified".Resource()); } if (System.Configuration.ConfigurationManager.ConnectionStrings[temp] == null) { throw new ProviderException("Connection_not_found".Resource()); } ConnectionString = temp; ApplicationName = config.GetStringValue("applicationName", "/"); if (ApplicationName.Length > 256) { throw new ProviderException("Provider_application_name_too_long".Resource()); } var type = typeof(TRole); var attr = type.GetCustomAttributes(typeof(EFDataMapperAttribute), false); RoleHelper = new Mapper.ClassHelper <TRole, Mapper.RoleColumnType, RoleColumnAttribute>(TablePrefix, TableSchema); if (attr != null && attr.Length > 0) { var mapperAttr = attr[0] as EFDataMapperAttribute; RoleMapper = Activator.CreateInstance(mapperAttr.MapperType) as Mapper.IRoleMapper <TRole>; if (RoleMapper == null) { throw new ProviderException("Reflection_can_not_cast_object".Resource(mapperAttr.MapperType.FullName, typeof(Mapper.IUserMapper <TRole>).FullName)); } } else { RoleMapper = new Mapper.RoleAutoMapper <TRole>(RoleHelper); } if (!RoleHelper.Properties.ContainsKey(Mapper.RoleColumnType.RoleName)) { throw new ProviderException("Reflection_property_is_required".Resource("RoleName")); } if (!RoleHelper.Properties.ContainsKey(Mapper.RoleColumnType.RoleID)) { throw new ProviderException("Reflection_property_is_required".Resource("RoleID")); } type = typeof(TUserRole); attr = type.GetCustomAttributes(typeof(EFDataMapperAttribute), false); UserRoleHelper = new Mapper.ClassHelper <TUserRole, Mapper.UserRoleColumnType, UserRoleColumnAttribute>(TablePrefix, TableSchema); if (attr != null && attr.Length > 0) { var mapperAttr = attr[0] as EFDataMapperAttribute; UserRoleMapper = Activator.CreateInstance(mapperAttr.MapperType) as Mapper.IUserRoleMapper <TUserRole>; if (UserRoleMapper == null) { throw new ProviderException("Reflection_can_not_cast_object".Resource(mapperAttr.MapperType.FullName, typeof(Mapper.IUserMapper <TUserRole>).FullName)); } } else { UserRoleMapper = new Mapper.UserRoleAutoMapper <TUserRole>(UserRoleHelper); } var generics = tmpType.GetGenericArguments(); var checkIndex = 1; #if USE_WEBMATRIX checkIndex = 2; #endif if (generics[checkIndex] != UserRoleHelper.Get(Mapper.UserRoleColumnType.UserID).PropertyType) { throw new ProviderException("Reflection_UserID_type_is_not_match".Resource()); } if (!UserRoleHelper.Properties.ContainsKey(Mapper.UserRoleColumnType.UserID)) { throw new ProviderException("Reflection_property_is_required".Resource("UserID")); } if (!UserRoleHelper.Properties.ContainsKey(Mapper.UserRoleColumnType.RoleID)) { throw new ProviderException("Reflection_property_is_required".Resource("RoleID")); } SupportApplication = RoleHelper.Properties.ContainsKey(Security.Mapper.RoleColumnType.Application); SupportCreateOn = RoleHelper.Properties.ContainsKey(Security.Mapper.RoleColumnType.CreateOn); var getUserMethod1 = memType.GetMethod("GetUserID", new Type[] { typeof(string) }, null); var getUserMethod2 = memType.GetMethod("GetUserID", new Type[] { typeof(string[]) }, null); Func <string, object> getUser1 = username => getUserMethod1.Invoke(membership, new object[] { username }); Func <string[], IEnumerable> getUser2 = username => getUserMethod2.Invoke(membership, new object[] { username }) as IEnumerable; var getUsernameMethod1 = memType.GetMethod("GetUsername", new Type[] { generics[1] }, null); var getUsernameMethod2 = memType.GetMethod("GetUsername", new Type[] { typeof(object).MakeArrayType() }, null); Func <object, string> getUsername1 = userid => getUsernameMethod1.Invoke(membership, new object[] { userid }) as string; Func <IEnumerable, string[]> getUsername2 = userid => getUsernameMethod2.Invoke(membership, new object[] { userid }) as string[]; GetUserID = getUser1; GetUserIDArray = getUser2; GetUsername = getUsername1; GetUsernameArray = getUsername2; attr = type.GetCustomAttributes(typeof(EFDataContextAttribute), false); if (attr != null && attr.Length > 0) { var contextAttr = attr[0] as EFDataContextAttribute; Context = Activator.CreateInstance(contextAttr.ContextType) as DataContext.IRoleContext <TRole, TUserRole, TRoleKey>; if (Context == null) { throw new ProviderException("Reflection_can_not_cast_object".Resource(contextAttr.ContextType.FullName, typeof(DataContext.IRoleContext <TRole, TUserRole, TRoleKey>).FullName)); } } else { Context = new DataContext.DefaultRoleContext <TRole, TUserRole, TRoleKey>(RoleHelper, UserRoleHelper); } Context.Initialize(this); }
/// <summary> /// Initializes the worker task with the specified configuration. /// </summary> /// <param name="name"></param> /// <param name="configValue"></param> public override void Initialize(string name, System.Collections.Specialized.NameValueCollection configValue) { ConnectionName = configValue.GetStringValue("connectionName", null); MessageFailedSkipSeconds = configValue.GetDoubleValue("MessageExceptionSkipSeconds", 0.0); base.Initialize(name, configValue); }