Asp.net mvc 如何使用ninject在非控制器类中注入类

Asp.net mvc 如何使用ninject在非控制器类中注入类,asp.net-mvc,ninject,Asp.net Mvc,Ninject,我在asp.mvc项目中设置了“Ninject”。它工作得很好,每个控制器都有它的依赖类。但我在mvc项目中有一个类不是控制器。它是一个扩展“MembershipProvider”的简单类(因为我已经创建了自定义成员资格),我需要在其中注入“UserRepository”类。 在NinjectControlelrFactory中,我将其绑定: private void AddBindings() { ninjectKernel.Bind<IUserRepository>().To&l

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

private void AddBindings()
{
ninjectKernel.Bind<IUserRepository>().To<UserRepository>().WithConstructorArgument(
                "connectionString", ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
}
private void AddBindings()
{
ninjectKernel.Bind().To().WithConstructorArgument(
“connectionString”,ConfigurationManager.connectionString[“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>();
            }
使用(IKernel kernel=new-StandardKernel())
{
kernel.Bind()
.至()
.带有构造函数参数(“连接字符串”、“ttttttttttttt”);
//var tc=kernel.Get();
this.userRepository=kernel.Get();
}

使用属性注入。在Ninject中注册您的
会员资格提供商
,然后使用

您将需要通过ninject上下文实例化
成员资格提供者

检查这些物品


使用属性注入。在Ninject中注册您的
会员资格提供商
,然后使用

您将需要通过ninject上下文实例化
成员资格提供者

检查这些物品


谢谢,这对我有帮助。但是你能查一下我的最新问题吗。我写了一些东西,它可以工作,但我不确定它是否是获取依赖类的有效方法?如果您的
成员身份提供程序中的此代码
-它不是依赖项注入,因为您在这里使用了实现类型
用户存储库
,并且它已经依赖于它。是的,您是对的。我将代码更改为属性注入,但我总是可以得到“未设置对象引用”;我不知道为什么:(可能你们会找到关于stackoverflow的答案。任何细节都会很有帮助。好的,当我在绑定部分(Global.asax)添加这段代码时,我发现“Kernel.Inject(Membership.Provider);”它与可注入proeprities结合使用。这是有效的方法吗?谢谢,这将帮助我。但是你能检查我更新的问题吗。我写了一些东西,它可以工作,但我不确定它是否是获取依赖类的有效方法?如果你的
成员身份提供程序中的此代码
-它不是依赖注入,因为你使用您的实现类型
UserRepository
在这里,并且它已经依赖于它。是的,您是对的。我将代码更改为属性注入,但我总是得到“对象引用未设置”,我无法理解原因:(可能您会找到关于stackoverflow的答案。任何详细信息都会有帮助。好的,我发现当我在绑定部分(Global.asax)中添加此代码时)“Kernel.Inject(Membership.Provider);”它与可注入proeprites结合使用。这种方法有效吗?