gpt4 book ai didi

asp.net-mvc - 如何为 MVC4 和自定义成员(member)提供配置 Ninject?

转载 作者:行者123 更新时间:2023-12-04 17:44:20 26 4
gpt4 key购买 nike

根据本文描述custom-membership-provider-with-repository-injection

我实现了通过注入(inject)提供的自定义成员(member)资格。

自定义成员(member)供应商

using Ninject;

public class CustomMembershipProvider : MembershipProvider
{
[Inject]
public IUserRepository UserRepository { get; set; }

[...]

自定义角色提供者
using Ninject;

public class CustomRoleProvider : RoleProvider
{
[Inject]
public IUserRoleRepository UserRoleRepository { get; set; }
[...]

内网页配置
<membership defaultProvider="CustomsMembershipProvider">
<providers>
<clear/>
<add name="CustomsMembershipProvider" type="namespace.CustomsMembershipProvider"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="customRoleProvider">
<providers>
<clear/>
<add name="customRoleProvider" type="namespace.customRoleProvider"/>
</providers>
</roleManager>

现在在 内NinjectWebCommon
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

RegisterServices(kernel);
return kernel;
}

private static void RegisterServices(IKernel kernel)
{
[...]

kernel.Bind<IUserRepository>().To<UserRepository>();
kernel.Bind<IUserRoleRepository>().To<UserRoleRepository>();

// Inject user & role repository into our custom membership & role providers.
kernel.Inject(Membership.Provider);
kernel.Inject(Roles.Provider);
}

当我运行应用程序时出现错误

This method cannot be called during the application's pre-start initialization stage.



来自 kernel.Inject(Membership.Provider);这条线

但是如果我将内核设置放在 内申请_开始

我得到以下错误

Error activating IUserRepository No matching bindings are available, and the type is not self-bindable. Activation path: 2) Injection of dependency IUserRepository into property UserRepository of type CustomMembershipProvider 1) Request for CustomeMembershipProvider



如何解决。 ??

最佳答案

结果始终为空。为什么?因为asp.net 有它自己的成员静态属性。

这是membership.provider。并且此实例不是实例 ninject 管理的一部分。

要解决它,您需要使用 kernel.inject。但是在生成 aspnetmvc.cs 时,您会看到它是在 PreApplicationStart 事件上注入(inject)的,并且不会让您这样做。

这是 的独奏密码 为我解决问题。将此添加到您的 NinjectWebCommon

    [assembly: WebActivator.PreApplicationStartMethod(typeof(TopRankFantasy.App_Start.NinjectMVC3), "Start")]
[assembly: WebActivator.PostApplicationStartMethod(typeof(TopRankFantasy.App_Start.NinjectMVC3), "RegisterMembership")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(TopRankFantasy.App_Start.NinjectMVC3), "Stop")]

public static void RegisterMembership()
{
bootstrapper.Kernel.Inject(Membership.Provider);
}

文章链接: Ninject and customMembership asp.net mvc 3

关于asp.net-mvc - 如何为 MVC4 和自定义成员(member)提供配置 Ninject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com