.Net Core框架的自动解析在DryIoC中找不到我的注册。注册无法解析
这使用新的.Net Core 2框架,DryIoC 2.10.7和DryIoc.Microsoft.DependencyInjection 1.2.2。我无法更新到DryIoC 2.11.7,因为DryIoc.Microsoft.DependencyInjection没有选择最新版本。在2.11.7安装之后,我尝试重新安装后者,但没有奏效(模棱两可的引用)。
这里是我的启动代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddControllersAsServices();
var container = new Container(rules => rules.With(propertiesAndFields: PropertiesAndFields.Auto))
.WithDependencyInjectionAdapter(services);
container.ConfigureServiceProvider<CompositionRoot>();
}
这里是我的注册代码:
public CompositionRoot(IRegistrator registrator, IContainer container)
{
//System Clock
registrator.Register<IClock, ConcreteClock>(Reuse.Singleton, null, null, IfAlreadyRegistered.Keep);
container.RegisterInstance<ISystemConfiguration>(new Configuration(container.Resolve<IClock>()), Reuse.Singleton, IfAlreadyRegistered.Keep);
//Logging
container.RegisterInstance<ILogging>(CreateLogger(container.Resolve<ISystemConfiguration>()), Reuse.Singleton, IfAlreadyRegistered.Keep);
}
最后控制器:
public class AdminController : Controller
{
private readonly ILogging _log;
private readonly IClock _clock;
public AdminController(ILogging log,
IClock clock)
{
_log = log;
_clock = clock;
}
}
这里是个例外:
System.InvalidOperationException:尝试激活 'DataDictionaryService.Controllers.AdminController'时无法解析 'SharedAssets.Interfaces.ILogging'类型的服务。在在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor 描述符,类型的serviceType,ISet的 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(类型 的serviceType,类型implementationType,ISet的
1 callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(Type serviceType, Type implementationType, ISet
1 callSiteChain) callSiteChain)在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(类型 的serviceType,ISet的字典,TKEY的键,Func`3 valueFactory,TARG ARG)在 Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(类型 serviceType)at Microsoft.Extensio ns.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(的IServiceProvider 提供商类型的serviceType)在 Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator.Create(ControllerContext ActionContext中)在 Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider。 <> c__DisplayClass5_0.g__CreateController0(ControllerContext controllerContext)处 Microsoft.AspNetCore.Mvc.Internal Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态& 下,适用范围&范围,对象&状态,布尔& isCompleted) .ControllerActionInvoker.d__14.MoveNext() ---从先前的位置,其中引发异常堆栈跟踪的末尾在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (任务 任务)在 Microsoft.AspNetCore.Mvc.Int ernal.ResourceInvoker.d__22.MoveNext() ---以前位置抛出异常的堆栈跟踪结束--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() Microsoft.AspNetCore.Mvc.Internal。 ResourceInvoker.Rethrow(ResourceExecutedContext 上下文)在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker。接下来在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__17.MoveNext() ---从以前的位置,其中的例外是堆栈跟踪的结尾(州&接下来, 范围&范围,对象&状态,布尔& isCompleted)抛出---在在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__15.MoveNext System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)() ---抛出异常的先前位置的堆栈跟踪结束---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo .Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext() ---从先前的位置堆栈跟踪,其中抛出异常结束---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.d__7.MoveNext() ---从以前的位置抛出异常的堆栈跟踪结束---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.d__7.MoveNext()
谢谢!
以看一个[例如用于DryIoC](https://bitbucket.org/dadhi/dryioc/src/8e609b011beafd71236f9cfe3bb2d3e0589e76ae/NetCore/src/DryIoc.AspNetCore.Sample/Startup。 cs?at = default&fileviewer = file-view-default)你需要返回容器。 – DavidG
谢谢DavidG,我不知道我是如何错过这个的,因为我看过同样的例子。我想这12个小时的日子已经开始接近我了...... – ChrisB