首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ninject.Web (webforms扩展),在webform页面之外注入?

Ninject.Web (webforms扩展),在webform页面之外注入?
EN

Stack Overflow用户
提问于 2010-10-11 23:50:12
回答 3查看 1.2K关注 0票数 1

我一直在使用Ninject.Web扩展将业务对象、存储库、实体框架上下文等注入到我的应用程序中。使用Inject属性可以很好地工作,该属性可以应用于继承自PageBase的webform中。我现在遇到了一个障碍,因为我试图编写一个自定义的成员资格提供程序,它需要在它内部完成注入,但这个提供程序当然不是从webform中实例化的。窗体身份验证将在对象需要时实例化该对象。如果不能访问Inject属性,我不知道该怎么做。我知道在某个地方有一个应用程序级内核,但我不知道如何利用它。任何建议都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-12 06:47:28

您在实例上执行IKernel.Inject。在您正在使用的扩展项目中查看Application类的源代码。

在V2的情况下,it's in a KernelContainer。所以你需要做一个:

代码语言:javascript
复制
KernelContainer.Inject( this )

其中this是您所说的非页面、非应用程序类。

您需要确保这种情况只发生一次-在Global中要小心这样做,它可能会被实例化多次。

此外,您的应用程序/ Global类需要从NinjectHttpAppplication派生,但我相信您已经介绍了这一点。

票数 1
EN

Stack Overflow用户

发布于 2011-06-24 08:13:24

您不必使用服务定位器模式,只需将其注入到Application_Start中的自定义成员资格提供者的属性中即可。假设您已经正确地注册了提供程序,您可以使用如下命令来完成此操作:

代码语言:javascript
复制
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        // Inject account repository into our custom membership & role providers.
        _kernel.Inject(Membership.Provider);

        // Register the Object Id binder.
        ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); 
    }

我在这里写了一个更深入的解释:

http://www.danharman.net/2011/06/23/asp-net-mvc-3-custom-membership-provider-with-repository-injection/

票数 2
EN

Stack Overflow用户

发布于 2010-10-12 04:49:56

您可能需要使用Service Locator模式,因为您无法控制成员资格提供程序的创建。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3907797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档