2

您好我一直在試圖登錄默認IUserStore即與S​​impleInjector註冊IUserStore用簡單的噴油器3.1.2

public class ApplicationUserManager : UserManager<ApplicationUser, int> 
    { 
     public ApplicationUserManager(IUserStore<ApplicationUser, int> store) 
      : base(store) 
     { 
     } 

的預製Identity類ApplicationUserManager我有看起來像App_Start文件夾中的文件SimpleInjectorInitializer這樣的:

public static class SimpleInjectorInitializer 
{ 
    public static void RegisterDependencies(Container container) 
    { 
     container.Register<ICatalogRepository, CatalogRepository>(); 
     container.Register<IUserRepository, UserRepository>(); 

     container.Register<ICatalogService, CatalogService>(); 
     container.Register<IUserService, UserService>(); 
     container.Register<IAdminService, AdminService>(); 

     container.Register<AccountController>(); 
     container.Register<ApplicationUserManager>(); 
     //container.Register<CustomUserStore>(); 
     //container.RegisterCollection(typeof(IUserStore<>), new[] { typeof(ApplicationUser) }); 

     //container.Register<IUserStore<>, store>(); 

     //container.RegisterPerWebRequest<IUserStore<ApplicationUser>>(() => new UserStore<ApplicationUser>(container.GetInstance<ApplicationDbContext>())); 

     container.Verify(); 
    } 
} 

正如你可以看到我已經嘗試了幾次通過尋找類似的堆棧溢出的問題得到它的工作,但它不是沒有改變的結果或給定一個語法錯誤。

點擊應用主頁按鈕的跡象目前的情況下,將引發此錯誤:

型ApplicationUserManager的構造函數中包含名爲「店」和被 未註冊類型IUserStore參數 。請確保IUserStore已註冊 ,或者更改ApplicationUserManager的構造函數。

如果下面的兩行寄存器ApplicationUserManager被未註釋然後將引發此錯誤:

類型的異常「System.ArgumentException」發生在 SimpleInjector.dll但在用戶代碼

沒有處理

附加信息:提供的類型ApplicationUser不是 實現IUserStore。

任何幫助,將不勝感激。

+0

請檢查這個鏈接,它有很好的解決方案。 http://stackoverflow.com/questions/30602687/simple-injector-identity-usermanagerappuser-int32-registration-error – Husein

+0

我試圖使用已發佈的鏈接中的示例,他們似乎適用於不同版本的簡單注射器或他們不工作與我的解決方案。 – PYROv1

回答

3

我回答了我自己的問題。我用其他各種堆棧溢出的問題和答案是編輯我SimpleInjectorInitializer如下:

public static class SimpleInjectorInitializer 
{ 
    public static void RegisterDependencies(Container container) 
    { 
     container.Register<ICatalogRepository, CatalogRepository>(); 
     container.Register<IUserRepository, UserRepository>(); 

     container.Register<ICatalogService, CatalogService>(); 
     container.Register<IUserService, UserService>(); 
     container.Register<IAdminService, AdminService>(); 

     container.RegisterPerWebRequest<IUserStore<ApplicationUser, int>>(
      () => new CustomUserStore(container.GetInstance<ApplicationDbContext>())); 
     container.RegisterPerWebRequest(
      () => new UserManager<ApplicationUser, int>(
       new CustomUserStore(
        container.GetInstance<ApplicationDbContext>()))); 
     container.Register(
      () => HttpContext.Current.GetOwinContext().Authentication); 
    } 
} 

注:container.Verify()將阻止該解決方案的工作,但它確實工作。我需要做進一步的研究,以便在使用container.Verify()時找到更好的方法。

+1

不要忘記在容器中顯式註冊ApplicationDbContext,不要忘記調用Verify()。 – Steven

+1

「container.Verify()將阻止此解決方案正常工作,但它確實有效」。調用'Verify'將失敗,因爲解決方案存在缺陷。驗證失敗,因爲'ApplicationDbContext'是一個暫時的,它不會被處置。試着將'ApplicationDbContext'註冊爲作用域(web請求)intance。 – Steven

相關問題