2011-05-01 58 views
3

我實現一個自定義RoleProvider並想用Ninject與參數的構造函數的問題但是我面對。任何想法如何注入這?Ninject並提供模型參數的構造函數

public class EFRoleProvider:RoleProvider 
{ 
    private readonly IRepository _repository; 

    // I want to INJECT this GOO here! 
    public EFRoleProvider() 
    { 
     IContextFactory contextFactory = new DbContextFactory<myEntities>(); 
     _repository = new RepositoryBase(contextFactory); 

    } 
} 
+0

這篇文章可能會讓你感興趣:http://blog.ploeh.dk/2011/04/27/ProviderIsNotAPattern.aspx – Steven 2011-05-01 21:37:47

+0

Great Post,所以基本上我應該推出自己的接口和實現,並從提供程序中清除提供程序XML web.config作爲提供者的東西很蹩腳。好的,回到製圖板LOL – CrazyCoderz 2011-05-02 13:51:23

回答

1

你不能注入硬編碼的東西。抱歉。沒有DI框架支持這個。在你的構造函數中,你已經對實例進行了硬編碼,所以這不再是控制的倒置。爲了進行控制反轉您需要定義層鬆耦合地:

public class EFRoleProvider: RoleProvider 
{ 
    private readonly IContextFactory _contextFactory; 
    public EFRoleProvider(IContextFactory contextFactory) 
    { 
     _contextFactory = contextFactory; 
    } 
} 

現在繼續和配置DI框架。

+0

當從RoleProvider派生時,你必須有一個無參數的ctor。這是我遇到這個問題的地方。配置我的DI不是問題:)參數化的構造函數永遠不會被調用。 – CrazyCoderz 2011-05-01 19:28:19

+0

@Assistant助理,是真的,一個是RoleProvider遺留ASP.NET類需要一個參數的構造函數和AFAIK沒有鉤子允許你控制它的創作。作爲替代方法,您可以在默認構造函數中從「StandardKernel」中獲取依賴項。 – 2011-05-01 19:31:06

+0

是啊,我期待在如何做到這一點與Ninject此刻 – CrazyCoderz 2011-05-01 19:38:21

相關問題