2016-02-23 50 views
0

IOC(簡單的注射器)ASP.NET標識 - 如何解開RoleManager(Web層)?

container.RegisterPerWebRequest<IUserStore<ApplicationUser>>(() => new UserStore<ApplicationUser>(new ApplicationDbContext())); 
container.RegisterPerWebRequest<IRoleStore<IdentityRole, string>>(() => new RoleStore<IdentityRole>()); 

我有我的ApplicationOAuthProvider:

(不耦合)

var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>(); 

(我的依賴與EF)

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())); 

我怎樣才能解開我的roleManager?

回答

0

我得到了它的傢伙(:

沒有更多dependencys

的IoC

container.RegisterPerWebRequest<IUserStore<ApplicationUser>>(() => new serStore<ApplicationUser>(new ApplicationDbContext())); 
container.RegisterPerWebRequest<IRoleStore<ApplicationRole, string>>(() => new RoleStore<ApplicationRole>(new ApplicationDbContext())); 

我的身份圖層上創建:

public ApplicationRoleManager(IRoleStore<ApplicationRole, string> roleStore) 
     : base(roleStore) 
    { 

    } 

    public static ApplicationRoleManager Create(
    IdentityFactoryOptions<ApplicationRoleManager> options, 
    IOwinContext context) 
    { 
     var manager = new ApplicationRoleManager(new RoleStore<ApplicationRole>(context.Get<ApplicationDbContext>())); 
     return manager; 
    } 

和實施

var roleManager = context.OwinContext.Get<ApplicationRoleManager>(); 

它的工作原理!

Tks for all

1

正如在此線程ASP MVC5 Identity User Abstraction解釋(我不知道如果這是你正在尋找)

沒有可如果你正在開發一個n層結構,就像DDD使用的解決方法。

您需要2個等級,一個用於User,另一個用於ApplicationUserApplicationUser必須具備User的所有屬性。就像這樣:

//DomainLayer 
public class User 
{ 
    public string Id { get; set; } 
    public string Title { get; set; } 
} 

//Infrastructure Layer 
public class ApplicationUser 
{ 
    public string Title { get; set; } 
} 

現在,問題是映射User類爲ApplicationUser類的同桌。像這樣:

public class UserConfig : EntityTypeConfiguration<User> 
{ 
    public UserConfig() 
    { 
     HasKey(u => u.Id); 

     ToTable("AspNetUsers"); 
    } 
} 

希望這有助於!

+0

我不認爲他在談論表映射,而是關於擺脫實體框架包依賴關係。 –

1

ASP.NET身份使用存儲並具有一組您可以實現的接口。基本接口爲IUserStore,但爲了使用ASP.NET Identity的其他功能,還必須實現其他接口,如IUserPasswordStoreIPhoneNumberStoreThis article描述了當你想實現自己的定製商店時你必須做的事情。這裏是an example,它使用MySQL的自定義存儲。

這不是一件容易的事情,我寫了自己的商店,使用Dapper,這是很多工作,但它可以完成。