2011-05-01 85 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

相关问题