0

我在使用Ninject的項目中設置了DI。這是UserController的一個例子。如何使用Ninject將IUserRepository注入到自定義成員資格提供程序中?

private readonly IRoleRepository roleRepository; 
private readonly IUserRepository userRepository; 

public UserController(IUserRepository userRepository, IRoleRepository roleRepository) 
{ 
    this.roleRepository = roleRepository; 
    this.userRepository = userRepository; 
} 

在我NinjectWebCommon.cs文件我有這樣的:

private static void RegisterServices(IKernel kernel) 
{ 
    kernel.Bind<IControllerFactory>().To<DefaultControllerFactory>(); 
    kernel.Bind<IUnitOfWork>().To<PortalContext>().InSingletonScope(); 
    kernel.Bind<IUserRepository>().To<UserRepository>(); 
    kernel.Bind<IRoleRepository>().To<RoleRepositoroy>(); 
}  

不過,我似乎無法弄清楚如何注入用戶和角色倉庫到自定義成員資格提供。任何幫助非常感謝,因爲我在這裏碰壁了。我正在使用Asp.net MVC4和EF4以及存儲庫和工作模式單元。謝謝。

+0

我掙扎了一段時間,我找到了解決辦法,並將其發佈到[此相關問題](http://stackoverflow.com/questions/10053289/ninject-injecting-membership-provider-in-registerservices-of -ninject-initializa /)。 – mmacneil007

回答

0

作爲一個簡單的解決方案,您可以將屬性注入到Ninject中。

[Inject] 
public IUserRepository UserRepository {get;set;} 
+0

當我這樣做我的UserRepository始終爲空? – BBauer42

+0

@ BBauer42對不起,很難說沒有看到你的代碼是爲我解決這個問題。你是否使用公共財產不會工作,否則。 –

+0

@ BBauer42奇。是另一個項目中的提供者到您的MVC應用程序? –

0

您可以使用屬性注入

[Inject] 
public IUserRepository userRepository {get;set;}; 

您必須對您的DbContext的範圍,但要小心,因爲MembershipProvider類是單身,其範圍是應用程序的生命週期。

+0

當我這樣做時,我的UserRepository始終爲空。我沒有在MyMembershipProvider中創建一個構造函數。我在RegisterServices中也沒有任何與成員資格提供者相關的內容。 – BBauer42

0

@feanz,關於你的問題:

@ BBauer42奇怪。是另一個項目中的提供者到您的MVC應用程序?

如果自定義提供程序位於單獨的項目(類庫)中,您將需要做什麼不同?

相關問題