.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