Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC/nInject:实现我自己的ApplicationUserManager_C#_Asp.net Mvc_Asp.net Mvc 4_Ninject - Fatal编程技术网

C# MVC/nInject:实现我自己的ApplicationUserManager

C# MVC/nInject:实现我自己的ApplicationUserManager,c#,asp.net-mvc,asp.net-mvc-4,ninject,C#,Asp.net Mvc,Asp.net Mvc 4,Ninject,我正在MVC4应用程序中使用nInject。我想实现我自己版本的ApplicationUserManager,因为搭建的版本创建了我的数据库上下文的一个单独实例(我使用nInject将请求范围数据库上下文注入到我的控制器中)。在ApplicationUserManager中使用单独的数据库上下文会在操作用户凭据时导致一些奇怪的问题 但是我在创建nInject绑定时遇到了一个问题: private static void RegisterServices(IKernel kernel) {

我正在MVC4应用程序中使用nInject。我想实现我自己版本的ApplicationUserManager,因为搭建的版本创建了我的数据库上下文的一个单独实例(我使用nInject将请求范围数据库上下文注入到我的控制器中)。在ApplicationUserManager中使用单独的数据库上下文会在操作用户凭据时导致一些奇怪的问题

但是我在创建nInject绑定时遇到了一个问题:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<CampaignDbContext>().ToSelf().InRequestScope();
    kernel.Bind<ApplicationUserManager>().ToSelf().InRequestScope();
    kernel.Bind<ApplicationSignInManager>().ToSelf().InRequestScope();
}        
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().ToSelf().InRequestScope();
kernel.Bind().ToSelf().InRequestScope();
kernel.Bind().ToSelf().InRequestScope();
}        
第一个很好,大概是因为CampaignDbContext有一个无参数构造函数

但第二个和第三个失败了。ApplicationUserManager的构造函数定义为:

public ApplicationUserManager( CampaignDbContext context )
    : base( new UserStore<CampaignDbUser>( context ) )
{
    // Configure validation logic for usernames
    UserValidator = new UserValidator<CampaignDbUser>(this)
    {
        AllowOnlyAlphanumericUserNames = true,
        RequireUniqueEmail = true
    };
    // etc
public ApplicationUserManager(活动数据库上下文)
:base(新用户存储(上下文))
{
//为用户名配置验证逻辑
UserValidator=新的UserValidator(此)
{
AllowOnlyAlphanumericUserNames=true,
RequireUniqueEmail=true
};
//等
我认为,因为CampaignDbContext本身是自绑定的,所以它的实例将被传递到ApplicationUserManager的构造函数中。但根据我收到的错误消息,这种情况似乎没有发生


如何配置nInject绑定?

ApplicationUserManager
应继承自
UserManager
UserManager
的构造函数采用
UserStore
,最后
UserStore
的构造函数采用
DbContext

与其尝试在上下文中传递到首先应该依赖于它的
ApplicationUserManager
,不如告诉Ninject如何实现
IUserStore

kernel.Bind().To().InRequestScope();
Bind(typeof(IUserStore)).To(typeof(UserStore)).InRequestScope();

然后,您只需将
ApplicationUserManager
注入到它需要的地方,Ninject将自动用
UserManager
实例填充它,该实例由您的
ActivityDBContext
初始化
ApplicationUserManager
应该继承自
UserManager
UserMan的构造函数ager
接受
UserStore
,最后
UserStore
的构造函数接受
DbContext

与其尝试在上下文中传递到首先应该依赖于它的
ApplicationUserManager
,不如告诉Ninject如何实现
IUserStore

kernel.Bind().To().InRequestScope();
Bind(typeof(IUserStore)).To(typeof(UserStore)).InRequestScope();

然后,您只需将
ApplicationUserManager
注入到它需要的地方,Ninject就会自动填充一个
UserManager
实例,该实例由您的
ActivityDBContext

Thanx初始化。我必须承认我不理解typeof(x)的语法现在要弄清楚为什么ApplicationSignInManager不断爆炸,
typeof(x)
是传递泛型类型而不向泛型指定类型参数所必需的。这允许您将
IUserStore
的所有引用绑定到
UserStore
,而不考虑最终的底层类型。否则,您必须为
IUserStore
IUserStore
等单独绑定我必须承认我不理解typeof(x)的语法,但它是有效的。现在,我要弄清楚为什么ApplicationSignInManager一直在爆炸,
typeof(x)
是传递泛型类型而不向泛型指定类型参数所必需的。这允许您将
IUserStore
的所有引用绑定到
UserStore
,而不考虑最终的底层类型。否则,您必须为
IUserStore
IUserStore
等单独绑定。
kernel.Bind<DbContext>().To<CampaignDbContext>().InRequestScope();
kernel.Bind(typeof(IUserStore<>)).To(typeof(UserStore<>)).InRequestScope();