问题标签 [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 回答
394 浏览

dryioc - DryIOC 在门面之间共享单例

我正在开发一个系统,该系统可以在几个不同的时间范围内处理各种金融工具的金融数据。

例如:

每个时间框架都有一个相当复杂的处理管道,我使用 DryIOC 通过管道路由数据,使用如下所述的 EventAggregator:DryIOC Event Aggregator

DryIOC 非常适合这个,因为它的速度非常快,可以跟上我需要的数据/事件的数量。

我有工具级别的依赖项,需要在该工具的不同时间范围之间共享。

而且我还有全局依赖项,例如需要在所有工具和所有时间范围之间共享的代理连接管理器。

容器是在运行时创建的;我可能会打开/关闭不同的工具和时间框架,并且需要制作一个新容器。

门面似乎很适合这个。我可以从一个全局容器开始,对于任何被激活的乐器,为该乐器制作一个 Facade。并从该容器中为每个时间范围制作一个容器。Facade 容器中的解析使用在那里定义的本地注册,然后在未解析时回退到父级。

但是,如文档中所述,门面有自己的单例。当我尝试从 Facade 作为单例解决全局依赖关系时,我得到一个新实例。

此测试失败:

我花了三天时间与 Facades、Scopes、NamedScopes 以及所有这些东西的组合作斗争。范围不起作用,因为如果我为工具创建一个新范围,然后为工具中的每个时间范围创建一个新范围并使用 InCurrent 范围解决 - 我仍然会得到一个新版本,因为每个时间范围都在它自己的范围内。

命名范围不起作用,因为我只在运行时知道仪器名称,并且为新仪器添加新注册,时间范围发生冲突。

我怎样才能将子容器分开,然后与他们的父母共享单例?

更新:

产生以下异常:

附带说明一下,它太烦人了,您无法从 Visual Studio 测试运行程序中复制异常。

0 投票
1 回答
117 浏览

dryioc - DryIOC 非惰性分辨率

如何在 DryIOC 中禁用延迟解析?我需要立即实例化我的一些单例。

目前我正在做所有的注册调用,然后对我需要在开始时实例化的那些调用进行另一块解析调用。但它变得有点笨拙。

0 投票
1 回答
304 浏览

dryioc - DryIOC 和 MediatR:对 IAsyncNotificationHandler 和 IAsyncRequestHandler 使用 InResolutionScopeOf 进行注入

这个问题是我之前的问题DryIOC Decorator 和 InResolutionScopeOf的后续问题

我要做的是在 IAsyncRequestHandler 和 IAsyncNotificationHandler 的解析范围内创建 EF DbContext 实例,这意味着注入请求中的上下文不能与注入通知(从请求中发布)中注入的上下文相同。由于通知是从请求处理程序内部发布的,因此这种嵌套给我想要的设置带来了一些麻烦。

值得注意的是,在给定的 IAsyncRequestHandler 或 IAsyncNotificationHandler 实例中注入的每个 DbContext 在它们自己的装饰器中都需要相同。

我创建了一个 dotnetfiddle 并尝试设置它https://dotnetfiddle.net/KiFCHY。(我在这个例子中省略了装饰器)

它包含一个 RequestHandler,它在被调用时打印一条消息,然后它发布一个通知,该通知打印另一条消息。但是,如您所见,未调用通知是因为 MediatR 无法获取 IAsyncNotificationHandler 实例(因为它无法解析 DbContext)。

这种设置可以吗?

谢谢

0 投票
2 回答
419 浏览

c# - 类库中的 DryIoC

我有一个相当简单的解决方案设置:

Web 项目 --> 服务层 --> 存储库

我的 IoCbootstrapper 类位于我的 Web 项目中。

这很好,但我的服务取决于存储库。

有没有办法在服务层类库中拥有一个“parital bootsrapper”,然后以某种方式将其作为配置传递给 Web 项目,因为这种方式无法创建服务实例,因为 Web 项目不知道存储库?

0 投票
0 回答
163 浏览

c# - 如何在 Windows Phone 8 PhoneApplicationPage 中使用 DryIoc 进行构造函数注入?

我以这种方式尝试了构造函数注入:

App.xaml.cs构造函数中:

DependencyService是我的自定义静态类,它创建Container并加载所有程序集的绑定。

在这种情况下App.RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e),方法总是被执行:

  • e.Exception是一个System.MissingMethodException与消息No parameterless constructor defined for this object.
  • e.Uri/MainPage.xamlWMAppManifest.xml文件中声明为NavigationPage.

MainPage构造函数内部,我可以直接使用容器成功解析服务,但我想使用构造函数注入。

我还没有找到任何具体的例子。有人知道它是如何工作的吗?

0 投票
1 回答
190 浏览

dryioc - DryIOC,MediatR - DecoratorWith 条件使用键控参数多次评估

这个问题是上一个关于使用 MediatR 和装饰器设置 DryIOC 的问题的又一个后续问题:DryIOC 和 MediatR:使用 InResolutionScopeOf 进行 IAsyncNotificationHandler 和 IAsyncRequestHandler 注入

在这个例子中,设置类似于我之前的问题,我们有请求 (IAsyncRequestHandler) 和通知 (IAsyncNotificationHandler),并且通知是从请求中触发的,并且两者都依赖于 DbContext,需要每个分辨率范围注入。

我现在正在做的是装饰 IAsyncRequestHandler 并且我正在使用一个键将 IActionHandler 类型的依赖项传递给装饰器。我正在注册这样的依赖项:

然后,像这样将参数传递给装饰器:

像这样设置,通知从请求处理程序成功触发。但是,如果我添加更多装饰器并将装饰器的设置参数更改为 DecoratorWith 并指定一个条件(即使它只是返回 true),则不会从请求处理程序中触发通知,因为 DbContext 未成功注入 IAsyncNotificationHandler .

这是一个显示问题的小提琴https://dotnetfiddle.net/ob0nfA

调试的时候发现第一个装饰器的DecoratorWith中的条件对于同一个服务类型被调用了两次,当有两个注册时。我不确定这是否是有意的,但是我相信这可能与问题有关,因为如果我只是返回 true,那么将为同一个处理程序注册多个装饰器,而应该只有一个。

我知道我可以使用 Made 来注册装饰器依赖项,但在这个特定的实例中,键控注册似乎更适合我的预期设置。所以我想知道我是否缺少某些东西,或者如果 DecoratorWith 为同一服务类型被多次调用而按预期工作,我想知道是否有一种方法可以区分调用,以便我只能正确注册一次装饰器。或者问题可能完全出在其他地方。

谢谢

0 投票
1 回答
796 浏览

dryioc - 开放仿制药注册

假设我有以下课程:

我想在 DryIoc 中注册这些类,并且需要每个类Process<T>都是单例的(就像那样Configuration<T>)。因此,Process<ClassA>将解决相同的实例,Process<ClassB>并将执行相同的操作。但是Process<ClassA>Process<ClassB>将是 2 个不同的实例。
这同样适用于Configuration<T>
我将如何注册这 3 个课程来实现我的需要?
请注意,构造函数是 internal
这是我没有成功的做法:

我得到:“DryIoc.dll 中发生了‘System.NullReferenceException’类型的异常,但未在用户代码中处理”,例如我这样做
var a = container.Resolve<Process<EventArgs>>();

0 投票
2 回答
337 浏览

c# - LoggingFactory 在第二次调用时处理

我刚刚将我的一个 ASP.NET Core 项目更新到 1.1 版,因为我收到以下错误(第一次调用时工作正常,但在以下情况下失败)

无法访问已处置的对象。

在以下行:

该项目使用 DryIoc 作为容器,我的启动看起来像这样:

我的 project.json 看起来像这样:

}

任何帮助将不胜感激

0 投票
2 回答
547 浏览

c# - 在基于 OWIN 的 ASP.NET WebAPI 中使用 DryIOC 不起作用

我有一个简单的应用程序,它使用 OWIN-Startup 类进行自我配置。但是,我无法让它工作!这是我的配置:

如您所见,MyOtherService是可解决的;但不是ContentController. 此外,当我请求 API 时,我收到此错误:

尝试创建“ContentController”类型的控制器时发生错误。确保控制器有一个无参数的公共构造函数。

谷歌搜索没有帮助。你能帮我弄清楚如何运行该应用程序吗?

更新:

似乎控制器根本没有注册。当我尝试解决-具有无依赖ContentController的默认值时 - 我收到此错误:ctor

0 投票
1 回答
297 浏览

dryioc - 带有注入原语的开放泛型

如何使用构造函数中注入的另一个开放泛型和原语注册一个开放泛型类型?
请参见下面的示例。
在此示例中,Resolve 抛出“无法将字符串解析为参数“connectionString””异常。(您可以在此处查看实时代码)