0

可能重复:
使用 Ninject 将存储库注入自定义成员资格提供程序

我已经对这个主题进行了太多搜索,最接近的答案是这里 MVC 3 ninject custom members contextposed error 但我不知道我的应用程序中的所有细节是一个包含我的实体和存储库抽象的域当我像这样使用我的 Ninject 绑定时,实现一切正常

 public class NinjectControllerFactory : DefaultControllerFactory{
    readonly IKernel _kernel;


    public NinjectControllerFactory(){
        _kernel=new StandardKernel();
        AddBindings();
    }


    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType){
        return controllerType == null
            ? null
            : (IController) _kernel.Get(controllerType);
    }
 void AddBindings(){
        _kernel.Bind<IٍSomeRepository>()
            .To<EFSomeRepository>();

但我不知道如何绑定我读过的客户会员提供者,我必须通过 poperty 注入但我不知道如何,有什么想法吗?

4

1 回答 1

0

首先,您应该使用 Ninject.MVC3 而不是您自己的控制器工厂。Ninject.MVC3 负责连接所有内容,您只需在 App_Start\NinjectWebCommon.cs 中提供映射

其次,不要使用 Ninject for Membership,除非您使用的是自定义会员提供程序。即使这样,如果您不将 Ninject 和 Membership 混合使用,痛苦也会少很多。我建议不要打扰它,除非你真的知道你在做什么。

问题是 Membership 是一个静态类,它创建了 Membership Provider 的静态实例。这意味着它不会在请求结束时被销毁。有很多方法可以解决这个问题,但总的来说,按原样使用 Membership 比尝试使其与 DI 一起使用要容易得多。

您链接到的问题解决了一个特定问题,与将业务逻辑注入您的自定义成员资格提供程序有关。如果您需要这样做,那么它可能是一个不错的选择。但是,我发现大多数自定义会员提供者往往非常简单。

于 2012-04-30T21:49:33.993 回答