【发布时间】:2012-02-09 01:55:08
【问题描述】:
有谁知道如何使用 NinjectMVC3.cs 来注入自定义会员提供程序类?我已经用谷歌搜索并尝试了每一个实现,但它们都不起作用。有人这样做吗?我尝试使用属性属性 [Inject] 进行注入不起作用并且不知道任何其他方式,因为构造函数注入也不起作用。
这些都不起作用:
public class AccountMembershipProvider : MembershipProvider
[Inject]
protected IAccountRepository accountRepository { get; set; }
//NinjectMVC.cs RegisterServices
kernel.Bind<IAccountRepository>().To<AccountRepository>();
kernel.Bind<MembershipProvider>().ToProvider<AccountMembershipProvider>();
public class AccountMembershipProvider : MembershipProvider
[Inject]
protected IAccountRepository accountRepository { get; set; }
//NinjectMVC.cs RegisterServices
kernel.Bind<IAccountRepository>().To<AccountRepository>();
kernel.Bind<MembershipProvider>().ToMethod(ctx=>Membership.Provider);
注入自定义成员资格提供程序的完整示例会很好。
【问题讨论】:
-
我使用统一,但尝试将成员资格提供者反对您的控制器怎么样。然后通过构造函数注入,您可以将存储库注入成员资格提供程序,以及不反对 tk 属性注入用法。
-
我考虑过这样做,但我希望能够编写 Membership.CreateUser(..) 而不依赖于自定义成员资格提供程序。我在自定义成员资格提供程序中使用存储库,成员资格提供程序是通过 Web 配置设置的。如果我要将成员资格注入控制器,那么我什至可能不使用 ASPNET 成员资格提供程序,这是我准备做的。使用带有 DI 的 MS Provider Model 几乎不值得头疼。非常感谢您的回复,不胜感激。
-
昨晚我读了一篇有趣的文章,介绍了在提供程序中解决的另一种技术 - stackoverflow.com/questions/4193484/… 虽然本质上它与下面的 Remo 完全相同,只是使用 Castle Windsor:bugsquash.blogspot.com/2010/11/…跨度>
-
我确实可以使用 Remo 的解决方案与 Ninject 3.0.0 一起使用,但我确实必须将 .InRequestScope 添加到 AccountRepository 这似乎有点有趣,因为我有 dbContext 的 .InRequestScope ?如果我在 memberhsip 提供程序之前调用另一个存储库,那么它不会公开,但如果我不这样做,它会引发 ObjectContext 已处置错误,我认为这是因为 HttpModule 中的 Dispose 方法,我不知道我是否应该这样做在其中实现一些东西。 Castle Windsor 的解决方案看起来确实干净多了,但我还没有放弃 Ninject
-
一旦我完成这篇文章,我肯定会在 github 上发布一个完整的示例应用程序。感谢您的回复 Adam,我会在示例应用程序上及时通知您。
标签: asp.net-mvc-3 ninject membership-provider