Microsoft.AspNet.Identity.Owin.OwinContextExtensions似乎不起作用

时间:2015-06-16 00:37:01

标签: vb.net owin asp.net-identity-2

我在一个单独的程序集中创建一个自定义的asp.net.identity提供程序,以便从两个不同的web api 2项目中使用它。 我将web api项目的默认vs2013模板作为指南,到目前为止,我已经实现了所需的类。 在单独的程序集中,我使用的是从Microsoft.AspNet.Identity.UserManager(Of T)类派生的用户管理器类。

Public Class EzeUserManager
Inherits UserManager(Of EzeIdentityUser)

现在我想实现create shared函数,以便在CreatePerOwinContext函数中用作回调。根据模板,我宣布这样:

Imports System.Threading.Tasks
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.Owin
Imports Microsoft.Owin

Public Class EzeUserManager
    Inherits UserManager(Of EzeIdentityUser)

... Class Implementation ...

Public Shared Function Create(options As IdentityFactoryOptions(Of EzeUserManager), context As IOwinContext)
    Dim Result As New EzeUserManager(New EzeIdentityUserStore(context.Get(Of EzeLDAPContext)()))

问题在于

context.Get(Of EzeLDAPContext)()

失败,因为它需要密钥。

从模板中我可以看到不需要密钥的get方法是在Microsoft.AspNet.Identity.Owin.OwinContextExtensions中定义的扩展,我已经安装并通过nuget引用并在类中导入它。

但它不起作用。

我发现密钥实际上是类的类型名称,所以我可以克服这个问题,但是我还没有尝试,因为我真的想让扩展工作。

问题是:我在这里遗漏了什么吗?

注意:有问题的项目是一个面向.NET 4.5.1的类库,其中包含以下参考:

Microsoft.AspNet.Identity.Core
Microsoft.AspNet.Identity.Owin
Microsoft.Owin
Microsoft.Owin.Security
Microsoft.Owin.Security.Cookies
Microsoft.Owin.Security.OAuth
Newtonsoft.Json
Owin

1 个答案:

答案 0 :(得分:0)

正如我在问题中解释的那样,我使用VS生成的模板作为指导。在我的项目的实现过程中,我已经多次更新nuget包,但仅在我的项目中不在模板项目中(相同的解决方案),因为我之后将删除它。这导致两个项目引用了所需程序集的两个不同版本。 我不知道这个“多”引用究竟是什么以及为什么会引起这个问题,但是一旦我更新了模板项目的nuget包,问题就解决了。

我希望这可以帮助有类似问题的人。