问题标签 [light-inject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 使用 LightInject 访问 Container 实例
使用 LightInject 时,如何在初始注册/引导之外的上下文中访问容器实例?我按照 LightInject 的入门指南 和谷歌搜索,但没有找到类似的东西。
作为参考,我介绍了如何在其他两个 IoC 框架中实现这一点。
忍者
使用 Ninject 时,我习惯于将 IKernel 类型自动绑定到内核(LighInject 上的容器),因此具有如下构造函数的类:
将能够使用内核来检索实例。
简单IOC
在使用 MvvmLight 自带的框架 SimpleIoC 时,可以使用静态属性(SimpleIoC.Default)来达到同样的目的:
light-inject - LightInject - 如何将多个接口注册到单个服务?
如何注册实现 4 个接口的服务?
例如:class Foo : IFoo, IBar, IApp, ISee { ... }
我希望有这样的事情:
container.Register<IFoo, IBar, IApp, ISee, Foo>();
但似乎这个签名是为了将各种类型传递给工厂,在这种情况下,工厂需要 4 个参数。
c# - 使用 LightInject,如何使用工厂方法注册通用服务?
我想配置一个记录到 xUnit 测试输出的记录器,并且应该替换所有ILogger<T>
依赖项。据我所知,解决这个问题的方法是使用带有工厂方法的通用服务。
使用时Microsoft.Extensions.DependencyInjection
,我可以执行以下操作:
如何使用 LightInject 实现相同的效果?
编辑:我的示例不起作用,因为创建的记录器无法转换为ILogger<T>
. 相反,我在下面发布了我的解决方法作为解决方案。
c# - 使用 lightinject 拦截在 mvc 5 中使用参数拦截动作控制器
我无法拦截带有参数的控制器操作。我正在使用带有 LightInject 和 LightInject.Interception 的 Asp.Net MVC 5。我收到以下错误:
无法将“System.Object[]”类型的对象转换为“System.Web.Mvc.CustomModelBinderAttribute[]”类型。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidCastException:无法将“System.Object[]”类型的对象转换为“System.Web.Mvc.CustomModelBinderAttribute[]”类型。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
我的代码是(我不插入视图,因为没有意义):
我的控制器是:
希望有人可以指导我正确的方式。
c# - LightInject 用参数注册泛型?
我有接口 IRepository 和 Class Repository 以及实现 IRepository 的参数构造函数。类和接口都是通用的。我想在注册时传递这个参数。代码如下:
我做了这样的通用类注册
我在注册时找不到传递参数的方法。
automapper - 使用 LightInject 配置 AutoMapper
有谁知道如何使用 LightInject 配置 AutoMapper?AutoMapper 文档只有 Ninject 和 Simple Injector 的示例。
我在尝试注册 AutoMapper 配置时遇到了困难。
我正在使用 ASP.NET MVC C#。
asp.net-core - 使用 lightinject 的 aspnet 核心中未解决的 DI
为长文道歉!
我正在尝试在 aspnet core 2.1 中为 RabbitMQ 构建一个消息侦听器。我一发布消息,就会在日志中收到此错误:
2018-09-29 12:35:35.459 INFO NServiceBus.RecoverabilityExecutor Immediate Retry 将重试消息“ab43”,因为出现异常:
System.InvalidOperationException:无法解析类型:Event.Processor.Listener.CustomerReceivedHandler,服务名称:---> System.InvalidOperationException:未解析的依赖项
csproj:
启动.cs
程序.cs
消息处理程序.cs
light-inject - 使用 LightInject,如何在不注册一堆工厂的情况下将参数传递给子依赖项?
在下面的代码中,我试图将 ViewModel 注入到 View 中,而 ViewModel 需要一个模型来包装和容器中的另一个服务。该模型未注册,因为它不是真正的“服务”。
我如何能:
a) 不必提供 IService 实例作为参数(让容器解决它),
b)不必为我的 ViewModels 注册工厂(会有很多)
所以我真正要求容器做的是在调用 GetInstance 期间将我的模型(我作为参数传递)视为注册的“服务”。
如果 LightInject 无法做到这一点,那么是否有任何容器具有类似的东西?
c# - 使用 LightInject 时在 LoadApplication 中投射异常
我是 Xamarin Forms 和 LightInject 的新手。
我得到一个例外:
System.InvalidCastException:指定的强制转换无效。
当调用 LoadApplication(new App()); 在 MainActivity.cs
当将实例调用为 NavigationPage 时,会发生这种情况。我试过
MainPage = instance
了,效果很好。但我需要将实例作为 NavigationPage 发送
你知道为什么会这样吗?
这是堆栈跟踪
这是异常详细信息
12-30 09:26:37.554 I/mono-stdout(18434): System.InvalidCastException: 指定的强制转换无效。System.InvalidCastException:指定的强制转换无效。12-30 09:26:37.558 I/mono-stdout(18434): 在 Xamarin.Forms.Internals.ToolbarTracker.RegisterChildPage (Xamarin.Forms.Page 页面) [0x0001c] 在 <3a9c335d80a748a29a8f8588acbed83f>:0 在 Xamarin.Forms.Internals .ToolbarTracker.RegisterChildPage(Xamarin.Forms.Page 页面)[0x0001c] in <3a9c335d80a748a29a8f8588acbed83f>:0 在 Xamarin.Forms.Internals.EnumerableExtensions.ForEach[T](System.Collections.Generic.IEnumerable 1[T] enumeration, System.Action
1[T] 操作)[0x00010 ] 在 <3a9c335d80a748a29a8f8588acbed83f>:0 12-30 09:26:37.560 I/mono-stdout(18434): 在 Xamarin.Forms.Internals.EnumerableExtensions.ForEach[T] (System.Collections.Generic.IEnumerable1[T] enumeration, System.Action
1 [T] 操作)[0x00010] 在 <3a9c335d80a748a29a8f8588acbed83f>:0 12-30 09:26:37.561 I/mono-stdout(18434):在 Xamarin.Forms.Internals.ToolbarTracker.TrackTarget(Xamarin.Forms.Page 页面) [0x00041] 在 <3a9c335d80a748a29a8f8588acbed83f> 中:0 在 Xamarin.Forms.Internals.ToolbarTracker.TrackTarget(Xamarin.Forms.Page 页面) [0x00041] 在 <3a9c335d80a748a29a8f8588acbed83f> 中:0 在 Xamarin.Forms.Internals.ToolbarTracker.TrackTarget .Page 值)[0x00025] in <3a9c335d80a748a29a8f8588acbed83f>:0 12-30 09:26:37.563 I/mono-stdout(18434):在 Xamarin.Forms.Internals.ToolbarTracker.set_Target(Xamarin.Forms.Page 值)[0x00025 ] 在 <3a9c335d80a748a29a8f8588acbed83f>:0 在 Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs1[TElement] e) [0x000fe] in <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.565 I/mono-stdout(18434): at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs
1[TElement] e) [0x000fe] in <02db0bcb95874f4db06b80f38eac4adf>:0 at FormsControls.Droid.AppCompatAnimationNavRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs 1[TElement] e) [0x00000] in <9cf8e9b117d44fb7a184e024868cb7a5>:0 12-30 09:26:37.567 I/mono-stdout(18434): at FormsControls.Droid.AppCompatAnimationNavRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs
1[TElement] e) [0x00000] in <9cf8e9b117d44fb7a184e024868cb7a5>:0 at Xamarin .Forms.Platform.Android.VisualElementRenderer 1[TElement].SetElement (TElement element) [0x000dd] in <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.569 I/mono-stdout(18434): at Xamarin.Forms.Platform.Android.VisualElementRenderer
1[TElement].SetElement (TElement element) [0x000dd] in <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.571 I/mono-stdout(18434): 在 Xamarin.Forms.Platform .Android.VisualElementRenderer1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <02db0bcb95874f4db06b80f38eac4adf>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer
1 [TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement 元素) [0x00027] 在 <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.573 I/mono-stdout(18434):在 Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement 元素,Android.Content.Context 上下文)[0x0001f] 在 <02db0bcb95874f4db06b80f38eac4adf>:0 在 Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin .Forms.VisualElement 元素,Android.Content.Context 上下文)[0x0001f] 在 <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.575 I/mono-stdout(18434):在 Xamarin.Forms.Platform.Android.AppCompat。 Platform.AddChild(Xamarin.Forms.Page 页面,System.Boolean 布局)[0x00009] 在 <02db0bcb95874f4db06b80f38eac4adf>:0 在 Xamarin.Forms.Platform.Android.AppCompat.Platform。AddChild(Xamarin.Forms.Page 页面,System.Boolean 布局)[0x00009] in <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.576 I/mono-stdout(18434):在 Xamarin.Forms.Platform.Android.AppCompat .Platform.SetPageInternal (Xamarin.Forms.Page newRoot) [0x00096] 在 <02db0bcb95874f4db06b80f38eac4adf>:0 在 Xamarin.Forms.Platform.Android.AppCompat.Platform.SetPageInternal (Xamarin.Forms.Page newRoot) [0x00096] 在 <02db0680fbadf>fddb0680fbadf4 :0 在 Xamarin.Forms.Platform.Android.AppCompat.Platform.SetPage (Xamarin.Forms.Page newRoot) [0x00087] in <02db0bcb95874f4db06b80f38eac4adf>:0 在 Xamarin.Forms.Platform.Android.FormsAppCompatActivity.InternalSetPage (Xamarin.Forms.页页)[0x00052] 在 <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.578 I/mono-stdout(18434):在 Xamarin.Forms.Platform.Android。AppCompat.Platform.SetPage (Xamarin.Forms.Page newRoot) [0x00087] in <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.580 I/mono-stdout(18434): 在 Xamarin.Forms.Platform.Android.FormsAppCompatActivity。 InternalSetPage (Xamarin.Forms.Page 页面) [0x00052] 在 <02db0bcb95874f4db06b80f38eac4adf>:0 在 Xamarin.Forms.Platform.Android.FormsAppCompatActivity.SetMainPage () [0x0000c] 在 <02db0bcb95874f4db06b80f38eac4adf>:6:0-37.2 /mono-stdout(18434): 在 Xamarin.Forms.Platform.Android.FormsAppCompatActivity.SetMainPage () [0x0000c] in <02db0bcb95874f4db06b80f38eac4adf>:0 在 Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication (Xamarin.Forms.Application 应用程序) [0x0026f] in <02db0bcb95874f4db06b80f38eac4adf>:0 12-30 09:26:37.583 I/mono-stdout(18434): 在 Xamarin.Forms.Platform。Android.FormsAppCompatActivity.LoadApplication (Xamarin.Forms.Application 应用程序) [0x0026f] in <02db0bcb95874f4db06b80f38eac4adf>:0 在 DipsDemoXaml.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x0002f] 在 C:\Users\madura.d \source\repos\DipsDemoXaml\DipsDemoXaml\DipsDemoXaml.Android\MainActivity.cs:22 12-30 09:26:37.585 I/mono-stdout(18434): 在 DipsDemoXaml.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle ) [0x0002f] 在 C:\Users\madura.d\source\repos\DipsDemoXaml\DipsDemoXaml\DipsDemoXaml.Android\MainActivity.cs:22Android\MainActivity.cs:22 12-30 09:26:37.585 I/mono-stdout(18434): 在 DipsDemoXaml.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x0002f] 在 C:\Users\madura .d\source\repos\DipsDemoXaml\DipsDemoXaml\DipsDemoXaml.Android\MainActivity.cs:22Android\MainActivity.cs:22 12-30 09:26:37.585 I/mono-stdout(18434): 在 DipsDemoXaml.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x0002f] 在 C:\Users\madura .d\source\repos\DipsDemoXaml\DipsDemoXaml\DipsDemoXaml.Android\MainActivity.cs:22
light-inject - InvalidOperationException:尝试在没有当前范围的情况下创建一次性实例 - 使用 .NET Core 3.0 的 LightInject
我一直在为新的 .NET Core 3.0 项目使用 LightInject 设置 DI。我在这里遵循了指南:https ://www.lightinject.net/microsoft.aspnetcore.hosting/ 。在运行项目时,我遇到了这个错误:
System.InvalidOperationException:尝试创建没有当前范围的一次性实例。在 LightInject.PerRequestLifeTime.TrackInstance(Scope scope, IDisposable 一次性) 在 LightInject.PerRequestLifeTime.GetInstance(Func`1 createInstance, Scope scope) 在 LightInject.ServiceContainer.TryGetInstance(Type serviceType) 在 LightInject.Microsoft.DependencyInjection.LightInjectServiceProvider.GetService(Type serviceType) 在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) 在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) 在 Microsoft.AspNetCore.Routing.Matching.DfaMatcherFactory.CreateMatcher(EndpointDataSource数据源)在 Microsoft.AspNetCore.Routing。
有没有人遇到同样的问题并找到了解决方法?