Asp.net mvc 如何使用ninject在非控制器类中注入类
我在asp.mvc项目中设置了“Ninject”。它工作得很好,每个控制器都有它的依赖类。但我在mvc项目中有一个类不是控制器。它是一个扩展“MembershipProvider”的简单类(因为我已经创建了自定义成员资格),我需要在其中注入“UserRepository”类。 在NinjectControlelrFactory中,我将其绑定: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
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结合使用。这种方法有效吗?