2010-11-08 46 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> 
相關問題