2010-11-08 53 views
1

我创建一个自定义的成员提供类库,它定义了我的Web项目来实现数据提供者接口。ASP.NET MVC2定义成员资格提供瓦特/数据提供者接口问题

我有创建实现接口的类的实例的问题。

我加入我的web.config中提取数据提供商输入了一条线,但它正在寻找该类型的会员库中(但在我的web项目中定义的)。

public class MvcRoleProvider : RoleProvider 
{ 
    public string ConnectionString { get; set; } 

    private IDataProvider _dataProvider; 

    public override void Initialize(string name, NameValueCollection config) 
    { 
     var dataProviderType = config["dataProviderType"]; 
     ConnectionString = ConfigurationManager.AppSettings[config["connectionStringName"]]; 

     if (!string.IsNullOrEmpty(dataProviderType)) 
     { 
      var type = Type.GetType(dataProviderType, true, true); 

      if (type != null && !string.IsNullOrEmpty(ConnectionString)) 
       _dataProvider = (IDataProvider)Activator.CreateInstance(type, ConnectionString); 
     } 
    } 

的Web.config

<roleManager enabled="true" defaultProvider="WebTestRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="WebTestRoleProvider" 
     applicationName="WebTest" 
     type="MvcMembership.MvcRoleProvider, MvcMembership" 
     dataProviderType="MyWebNameSpace.MyWebProject.DataProviderClassName" 
     connectionStringName="TheConnectionStringName" /> 
    </providers> 
</roleManager> 

错误:

Parser Error Message: Could not load type 'MyWebNameSpace.MyWebProject.DataProviderClassName' from assembly 'MvcMembership, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. 

我是否采取正确的方法呢?如果我想一般的定制会员库,我不应该执行在我的web /数据项目相应的数据提供者(在这个例子中,我让一个在网上进行测试)?

回答

0

我结束了使用Assembly.CreateInstance像这样:

厂:

public class DataProviderFactory 
{ 
    public IDataProvider GetProvider(string assemblyName, string type, string connectionString) 
    { 
     var assembly = System.Reflection.Assembly.Load(new AssemblyName(assemblyName)); 
     return (IDataProvider)assembly.CreateInstance(type, true, BindingFlags.CreateInstance, null, new object[]{ connectionString }, null, null); 
    } 
} 

RoleProvider:

public class MvcRoleProvider : RoleProvider 
{ 
    public string ConnectionString { get; set; } 

    private IDataProvider _dataProvider; 

    public override void Initialize(string name, NameValueCollection config) 
    { 
     DataProviderFactory factory = new DataProviderFactory(); 
     _dataProvider = factory.GetProvider(config["dataProviderAssembly"], config["dataProviderType"], ConfigurationManager.AppSettings[config["connectionStringName"]]); 

     base.Initialize(name, config); 
    } 

随着web.config中的以下设置:

<roleManager enabled="true" defaultProvider="MvcRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="MvcRoleProvider" 
     applicationName="MyWebNameSpace" 
     type="MvcMembership.MvcRoleProvider" 
     dataProviderType="MyWebNameSpace.MyWebProject.DataProviderClassName"    dataProviderAssembly="EmailService.Web.EmailAdmin" 
     connectionStringName="MyMembershipConnection" /> 
    </providers> 
</roleManager> 
相关问题