我在扩展CustomUserStore时遇到了一些麻烦。
正如您在以下链接上看到的那样,商店拥有正确的UserStore(我的自定义商店):
但是,当尝试调用自定义方法时,我将立即收到编译器错误,内容如下: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。但这只会创建第二个对象。
这是我与此相关的文件:
就像您在这张图片上看到的那样,我的IDE也没有显示给我调用方法(在名称之前为FindByMailAsync的方法)的机会:
据我了解,services.AddTransient<IKoUserStore<KoUser>, KoUserStore>();
应该处理此实现。我还创建了用于扩展它们的自定义接口(并让它们继承)。但是我仍然不知道为什么我无法调用扩展方法,即使通过正确的UserStore(KoUserStore)实现了在“调试图片”中可以看到。
PS:我在Research上可以找到类似的问题,但也没有解决方案。
特别是本部分:
所以从理论上讲..如果依赖项注入在通过构造函数注入时将IUserStore的类型解析为RavenUserStore。.这不意味着UserManager获得了RavenUserStore作为其Store属性吗?
答案 0 :(得分:0)
由于UserManager.Store属性的类型为IUserStore<TUser>
,因此您在KoUserManager
的构造函数中进行的转换无效。您可以将该类型转换移至Test
/ XYZ
方法,或使用单独的变量来访问自定义方法。
编辑:这是一个示例:
public void Test() {
var koUserStore = (IKoUserStore<KoUser>) Store;
koUserStore.Test();
// ...
}
编辑:在调试器中看到的是变量的run-time type
(KoUserStore
),但是通常您只能访问compile-time type
({{ 1}}),这就是为什么您需要执行强制转换。有关更多信息,请参见此answer。