【问题标题】:How to inject class in nonController class with ninject如何使用ninject在nonController类中注入类
【发布时间】:2011-09-04 13:18:00
【问题描述】:

我在我的 asp.mvc 项目中设置了“Ninject”。它工作正常,每个控制器都得到它的依赖类。但是我在 mvc 项目中有一个不是控制器的类。这是一个扩展“MembershipProvider”的简单类(因为我已经自定义了成员资格),我需要在其中注入“UserRepository”类。 在 NinjectControlelrFactory 中,我将其绑定:

private void AddBindings()
{
ninjectKernel.Bind<IUserRepository>().To<UserRepository>().WithConstructorArgument(
                "connectionString", ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
}

但是如何从非控制器类中获取它呢? 附言 我无法通过构造函数注入。

我有一些解决方案,但我不知道它有多“干净”:

using (IKernel kernel = new StandardKernel())
            {
                kernel.Bind<IUserRepository>()
                    .To<UserRepository>()
                    .WithConstructorArgument("connectionString", "ttttttttttttt");
                //var tc = kernel.Get<IUserRepository>();
                this.userRepository = kernel.Get<IUserRepository>();
            }

【问题讨论】:

    标签: asp.net-mvc ninject


    【解决方案1】:

    使用属性注入。在 Ninject 中注册您的 MembershipProvider 并使用 Property injection

    您需要通过 ninject 上下文实例化 MembershipProvider

    查看这些文章。

    Property Injection in ASP.NET MVC with Ninject

    Injecting properties in Ninject 2 without 'Inject' attribute

    【讨论】:

    • 谢谢,这对我有帮助。但是你能检查我更新的问题吗?我写了一些东西,它可以工作,但我不确定它是否是获取依赖类的有效方法?
    • 是的,你是对的。我将代码更改为属性注入,但我总是得到“未设置对象引用”我不知道为什么:(
    • 可能你会找到答案here,它已经在stackoverflow上被问过了。任何细节都会有所帮助。
    • 好的,我发现当我在绑定部分 (Global.asax) “Kernel.Inject(Membership.Provider);”中添加此代码时它与 Injectable proeprties 结合使用。这是有效的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2017-05-28
    相关资源
    最近更新 更多