问题标签 [dryioc]

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.

0 投票
1 回答
820 浏览

dryioc - 如何在类库的主应用程序中使用 Dryioc 容器

我是dryioc的新手,所以请原谅我的无知:)

我想了解以下正确方法是什么,

创建一个创建 Dryioc 容器实例的控制台应用程序。在容器中注册一个记录器(作为单例)。然后从要在控制台应用程序中使用的类库(单独的项目)中实例化一个类,并能够从类库中引用容器(主应用程序)以获取记录器的实例。因此类库将利用在控制台应用程序中注册的任何记录器。

我不希望将容器作为类库中构造函数的一部分传递。

感谢您的任何帮助。

0 投票
1 回答
862 浏览

xamarin - PrismDryIoc.Forms AutowireViewModel 不工作

我创建了一个 Prism Unity 应用程序(来自 prism 扩展包 - 非常好),添加了 2 个新视图并在视图之间设置了基本导航。这一切都很好,没有任何问题。

我真正想要的是使用 DryIoc(公司政策)。所以我开始删除统一包(Unity 和 Prism.Unity.Forms)并安装 DryIoc 包(DryIoc 和 Prism.DryIoc.Forms)。修复了 App.xaml 以使用正确的命名空间 (xmlns:prism="clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms"),并且还修复了所有其他引用以使用 DryIoc 而不是 Unity 引用。

这一切都编译并运行,没有任何例外。但是当我调试时,很明显 AutoWireup 没有按预期工作(至少正如我所期望的那样)。ViewModel 的构造函数(或任何其他位置)中的断点未命中,并且 Title 绑定未通过。

是否有我缺少的配置/设置或参考?

我的代码:App.xaml:

应用程序.xaml.cs:

MainPage.xaml:

MainPageViewModel.cs:

如上所示,我使用 PageName 和 PageNameViewModel 的标准命名约定,并将 AutoWireUp 设置为 True。

这一切都适用于 Unity,但我在 DryIoc 中遗漏了一些东西......但什么让我逃脱了。

我已经搜索了整个项目,Unity 没有任何参考或痕迹。

任何帮助深表感谢。

0 投票
1 回答
1078 浏览

c# - DryIoc 用函数解析

我试图让对象作为Func<>. 但我不知道该怎么做。

例如,这里我有一个变量(函数参数)lazyInt(可能是某种长时间运行计算的结果),并且在以后可能使用之前不需要该结果。

我尝试了一些使用ServiceInfo.Of等,但暂时没有成功。如何做呢?

0 投票
2 回答
2686 浏览

c# - 使用 DryIoc 创建具有多个服务注册的单例

问题

我正在尝试使用 DryIoc 注册一个单例,但容器正在返回我的单例类的多个实例。单例类注册为多个不同服务接口的实现类型。当 DryIoc 请求上述任何服务接口时,我希望得到我的单例类的相同实例,但这没有发生,我不知道为什么。

一个例子

这是我正在尝试做的一个基本示例。在此示例中,我有一个类,Foo我想将其用作接口IFooIBar. 换句话说,当从容器中解析出IFoo或时IBar,我希望Foo返回相同的实例。

服务接口

单例(实现)类

考试

深思熟虑的解决方案

我考虑过使用 DryIoc 的RegisterInstance方法,但这需要手动创建类,我试图避免这种情况,因为与上面的简化示例不同,现实世界的类有它自己的依赖项。

0 投票
2 回答
1663 浏览

c# - 如何在 Dryloc (IOC) 中注册对象

我决定在我的 C# 应用程序中更改 IOC。它从 Unity 移动到 Dryloc。我的问题是我不知道如何在容器中注册对象。

在 Unity 中,它的工作方式如下:

但是如何在 Dryloc 中做到这一点?

更新 1:

我试过这样的代码:

但是方法 RegisterInstance 不存在。找到容器构造函数名称。我的应用正在使用:DryIoc.dll.2.7.1\lib\net45\DryIoc.dll

更新 2:

我使用 VS2012,附图片: DryIOC问题

0 投票
1 回答
1786 浏览

c# - 无法解析 XXX。没有找到服务注册并且 Rules.FallbackContainers 的数量:0 和 Rules.UnknownServiceResolvers 的数量:0

我的应用在最后一行出现错误:

收到错误:

无法解析 XXX。没有找到服务注册并且 Rules.FallbackContainers 的数量:0 和 Rules.UnknownServiceResolvers 的数量:0

我的代码:

0 投票
0 回答
308 浏览

c# - DryIoC约定映射如何?

我想将 DryIoC 容器设置为默认约定映射(例如:将 IFoo 解析为 Foo 并将 IBar 解析为 Bar)。

如何实现?

0 投票
1 回答
409 浏览

dryioc - DryIoc,所有类 Singleton 和 DbContext 作为 WebRequest

我正在尝试创建完全单例应用程序(Web 和控制台)。但是实体 DbContext 应该在 web 上使用 PerWebRequest。

我应该如何在容器上注册它以支持这一点?我知道一旦类被初始化为单例,我将在内存上的单个实例上运行,所有注入的类也作为单例。

以下代码是我对所有 Web 应用程序和控制台应用程序的容器初始化。- 在控制台中运行时我应该如何注册?- 当在 Web 上运行并且 Owin 调用启动事物时,有时我需要解析要在身份验证中使用的对象,但 Owin 在“无上下文”环境中运行。如何检测和使用它?

0 投票
1 回答
502 浏览

dryioc - DryIOC 装饰器和 InResolutionScopeOf

我正在尝试设置一个依赖项,我希望将其注入到基本接口(MediatR 处理程序)的解析范围中:

然而,这个接口是用一些装饰器设置的,它们依赖于 IActionHandler,而 IActionHandler 又依赖于 DbContext:

我在尝试解决该 IActionHandler 的实现时遇到异常,因为它无法注入 DbContext,因为它似乎在范围内不可用。

我尝试将 IActionHandler 设置为 InResolutionScopeOf 的目标,但是在我的 IAsyncRequestHandler<,> 中无法解析 DbContext。

我需要每个 DbContext 实例在源自 IAsyncRequestHandler<,> 解析的任何装饰器或 IActionHandler 中可用,并且该实例也应该注入到 IAsyncRequestHandler<,> 实现中。

关于如何实现这种注入的任何想法?

谢谢

0 投票
1 回答
1437 浏览

c# - DryIoc:无法弄清楚如何注册 IDisposable Decorator 对象

我正在尝试围绕IDisposable数据库上下文设置一个装饰器:

如果我取消注释最后一行,程序会抛出:

DryIoc.ContainerException: Registered Disposable Transient service Lib.DI.IContext with key {no key} and factory container won't be disposed by container. DryIoc does not hold reference to resolved transients, and therefore does not control their dispose. To silence this exception Register<YourService>(setup: Setup.With(allowDisposableTransient: true)) or set the rule Container(rules => rules.WithoutThrowOnRegisteringDisposableTransient()). To enable tracking use Register<YourService>(setup: Setup.With(trackDisposableTransient: true)) or set the rule Container(rules => rules.WithTrackingDisposableTransient()) à DryIoc.Throw.It(Int32 error, Object arg0, Object arg1, Object arg2, Object arg3) à DryIoc.Container.ThrowIfInvalidRegistration(Factory factory, Type serviceType, Object serviceKey, Boolean isStaticallyChecked) à DryIoc.Container.Register(Factory factory, Type serviceType, Object serviceKey, IfAlreadyRegistered ifAlreadyRegistered, Boolean isStaticallyChecked) à DryIoc.Registrator.Register[TService,TImplementation](IRegistrator registrator, IReuse reuse, Made made, Setup setup, IfAlreadyRegistered ifAlreadyRegistered, Object serviceKey)

怎么Setup.Decorator搭配trackDisposableTransient