C# 简单的注入器-难以使用ASP.NET 5 Identity和RavenDB

C# 简单的注入器-难以使用ASP.NET 5 Identity和RavenDB,c#,asp.net,asp.net-identity,simple-injector,C#,Asp.net,Asp.net Identity,Simple Injector,我试图在MVC应用程序上使用SimpleInjector和ASP.NET 5,但在正确连接时遇到了一个重大问题 我运行了一个RavenDB数据库,因此我有实例化实例的方法,这就是我在注册接口时使用的方法,如下所示 private void InitializeContainer(IApplicationBuilder app) { container.CrossWire<IUserStore<AppUser>>(app); container.Cross

我试图在
MVC
应用程序上使用
SimpleInjector
ASP.NET 5
,但在正确连接时遇到了一个重大问题

我运行了一个
RavenDB
数据库,因此我有实例化实例的方法,这就是我在注册接口时使用的方法,如下所示

private void InitializeContainer(IApplicationBuilder app) {

    container.CrossWire<IUserStore<AppUser>>(app);
    container.CrossWire<UserManager<AppUser>>(app);
    container.CrossWire<SignInManager<AppUser>>(app);
    container.CrossWire<ILoggerFactory>(app);

    container.Register<IDocumentStore>(RavenDatabase.OpenDatabase);

    container.Register<IDocumentSession>(RavenDatabase.OpenSession);

    container.Register<IAsyncDocumentSession>(RavenDatabase.OpenAsyncSession);

    container.Register<ILookupNormalizer>(() => new LowerInvariantLookupNormalizer());

    container.Register<IPasswordHasher<AppUser>>(() => new PasswordHasher<AppUser>());
}
使用这样定义的方法

public static UserStore<AppUser> UserStore() {
    // check to see if we even have a session factory to get a session from
    if (documentStore == null)
        OpenDatabase();

    return new UserStore<AppUser>(documentStore.OpenAsyncSession());
}
System.InvalidOperationException异常 System.Reflection.TargetInputException异常 调用的目标已引发异常。 位于System.RuntimeMethodHandle.InvokeMethod(对象目标、对象[]参数、签名符号、布尔构造函数) 位于System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象obj,对象[]参数,对象[]参数) 在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性) 在System.Reflection.MethodBase.Invoke(对象obj,对象[]参数)处 在Microsoft.AspNet.Hosting.Startup.ConfigureBuilder.Invoke(对象实例,IAApplicationBuilder) 在Microsoft.AspNet.Hosting.Startup.ConfigureBuilder.c__DisplayClass4_0.b__0(IAApplicationBuilder builder)中 在Microsoft.AspNet.Hosting.Internal.AutoRequestServicesStartupFilter.c\u DisplayClass0\u 0.b\u 0(IApplicationBuilder) 在Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplication()上
据我所知,这个问题与简单的喷油器无关。从您的注册和例外信息中,我看到以下情况:

  • 您正在从Simple Injector解析
    LoginController
  • LoginController
    取决于
    Raven.Client.IAsyncDocumentSession
  • IAsyncDocumentSession
    使用
    CrossWire
    从ASP.NET配置系统交叉连接到简单注入器
  • IAsyncDocumentSession
    已在ASP.NET配置系统中注册
  • 在ASP.NET中注册的
    IAsyncDocumentSession
    的实现取决于
    UserStore
  • ASP.NET配置系统无法解析该
    IAsyncDocumentSession
    注册,并引发异常,说明:
尝试激活“App.Identity.UserStore`1[App.Identity.AppUser]”时,无法解析类型“Raven.Client.IAsyncDocumentSession”的服务

换句话说,当您从ASP.NET配置系统解析
LoginController
IAsyncDocumentSession
时,您将得到相同的异常。只需调用以下方法之一,您将看到相同的错误:

app.ApplicationServices.GetRequiredService<LoginController>();
// or
app.ApplicationServices.GetRequiredService<IAsyncDocumentSession>();
app.ApplicationServices.GetRequiredService();
//或
app.ApplicationServices.GetRequiredService();

我认为
IAsyncDocumentSession
的实现取决于
UserStore
IUserStore
,但您尚未在ASP.NET配置系统中注册它。

请发布包含异常和所有内部异常的异常消息的完整堆栈跟踪。好的,我已经添加了所有这些。我尝试过改变顺序,但不幸的是我仍然得到相同的结果。@Ciel,我没有说任何关于改变顺序的事情。我说ASP.NET配置中可能缺少注册。因此,您可能需要添加一个
services.AddTransient(ravendabase.UserStore)或类似的东西。好吧,我这样做了,现在它在
UserManager
需要
IUserStore
时犹豫了。我太迷路了,这些对我来说都没有意义。在微软添加所有这些内置的东西之前,这要容易得多。@Ciel“在微软添加所有这些内置的东西之前,这要容易得多。”。是的,我同意。我迷路了。我以为我不能同时使用身份和第三方国际奥委会?
Unable to resolve service for type 'Raven.Client.IAsyncDocumentSession' while attempting to activate 'App.Identity.UserStore`1[App.Identity.AppUser]'.
at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.PopulateCallSites(ServiceProvider provider, ISet<Type> callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.CreateCallSite(ServiceProvider provider, ISet<Type> callSiteChain) 
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetResolveCallSite(IService service, ISet<Type> callSiteChain) 
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetServiceCallSite(Type serviceType, ISet<Type> callSiteChain) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.PopulateCallSites(ServiceProvider provider, ISet<Type> callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) 
at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.CreateCallSite(ServiceProvider provider, ISet<Type> callSiteChain) 
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetResolveCallSite(IService service, ISet<Type> callSiteChain) 
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetServiceCallSite(Type serviceType, ISet<Type> callSiteChain) 
at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType, ServiceProvider serviceProvider) 
at System.Collections.Concurrent.ConcurrentDictionaryExtensions.GetOrAdd<TKey, TValue, TArg>(ConcurrentDictionary<TKey, TValue> dictionary, TKey key, Func<TKey, TArg, TValue> valueFactory, TArg arg) 
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType) 
at Microsoft.Extensions.DependencyInjection.ServiceProviderExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) 
at Microsoft.Extensions.DependencyInjection.ServiceProviderExtensions.GetRequiredService<T>(IServiceProvider provider) 
.lambda_method(Closure ) 
at SimpleInjector.InstanceProducer.BuildAndReplaceInstanceCreatorAndCreateFirstInstance() 
at SimpleInjector.InstanceProducer.GetInstance()
Unable to resolve service for type 'Raven.Client.IAsyncDocumentSession' while attempting to activate 'App.Identity.UserStore`1[App.Identity.AppUser]'.
at SimpleInjector.InstanceProducer.GetInstance() 
at SimpleInjector.InstanceProducer.VerifyInstanceCreation()
The configuration is invalid. Creating the instance for type LoginController failed. Unable to resolve service for type 'Raven.Client.IAsyncDocumentSession' while attempting to activate 'App.Identity.UserStore`1[App.Identity.AppUser]'.
Exception has been thrown by the target of an invocation.
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
at Microsoft.AspNet.Hosting.Startup.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) 
at Microsoft.AspNet.Hosting.Startup.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder) 
at Microsoft.AspNet.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder) 
at Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplication()
app.ApplicationServices.GetRequiredService<LoginController>();
// or
app.ApplicationServices.GetRequiredService<IAsyncDocumentSession>();