ASP.NET无法访问扩展的UserStore

时间:2019-11-16 18:59:58

标签: c# asp.net asp.net-web-api asp.net-identity asp.net-core-3.0

我在扩展CustomUserStore时遇到了一些麻烦。

正如您在以下链接上看到的那样,商店拥有正确的UserStore(我的自定义商店): enter image description here 但是,当尝试调用自定义方法时,我将立即收到编译器错误,内容如下:KoUserManager.cs(19, 26): [CS1061] 'IUserStore<KoUser>' does not contain a definition for 'Test' and no accessible extension method 'Test' accepting a first argument of type 'IUserStore<KoUser>' could be found (are you missing a using directive or an assembly reference?)

我已经尝试了多种方法,但是现在唯一的工作方法是,在UserManager中创建一个单独的对象,并将其转换为Custom UserStore。但这只会创建第二个对象。

这是我与此相关的文件:

IKoUserStore

KoUserStore

IKoPasswordStore

KoUserManager

Startup

就像您在这张图片上看到的那样,我的IDE也没有显示给我调用方法(在名称之前为FindByMailAsync的方法)的机会:enter image description here

据我了解,services.AddTransient<IKoUserStore<KoUser>, KoUserStore>();应该处理此实现。我还创建了用于扩展它们的自定义接口(并让它们继承)。但是我仍然不知道为什么我无法调用扩展方法,即使通过正确的UserStore(KoUserStore)实现了在“调试图片”中可以看到。

PS:我在Research上可以找到类似的问题,但也没有解决方案。

特别是本部分:

  

所以从理论上讲..如果依赖项注入在通过构造函数注入时将IUserStore的类型解析为RavenUserStore。.这不意味着UserManager获得了RavenUserStore作为其Store属性吗?

ASP.NET Core Identity - UserManager and UserStore woes

1 个答案:

答案 0 :(得分:0)

由于UserManager.Store属性的类型为IUserStore<TUser>,因此您在KoUserManager的构造函数中进行的转换无效。您可以将该类型转换移至Test / XYZ方法,或使用单独的变量来访问自定义方法。

编辑:这是一个示例:

public void Test() {
    var koUserStore = (IKoUserStore<KoUser>) Store;
    koUserStore.Test();
    // ...
}

编辑:在调试器中看到的是变量的run-time typeKoUserStore),但是通常您只能访问compile-time type({{ 1}}),这就是为什么您需要执行强制转换。有关更多信息,请参见此answer