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
从ASP.NET配置系统交叉连接到简单注入器CrossWire
已在ASP.NET配置系统中注册IAsyncDocumentSession
- 在ASP.NET中注册的
的实现取决于IAsyncDocumentSession
UserStore
- ASP.NET配置系统无法解析该
注册,并引发异常,说明:IAsyncDocumentSession
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>();