问题标签 [tinyioc]

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 回答
345 浏览

c# - TinyIoC Resolve 插件合约

如何使用 TinyIoC 解决插件联系人?

Host.exe /w 对 Core.Contract.dll 的引用

Core.Contracts.dll 中的合同 IService 并在主机程序集中引用,这是为了让拖放插件有机会在不重新编译的情况下工作。在 EchoCodeAnalysis.dll 中,我们有实际的插件实现,它没有在主机程序集中引用,但使用 IService 共享 Core.Contracts.dll 的主机。

Core.Contract.dll:

EchoCodeAnalysis.dll:

编辑:

我设法解决了问题的第一部分。

将获取并解析所有 IService 接口,这将插件限制为该接口,而不是任何高级实现。比如说,IMenuItem 实现为 IService,上面的代码可以找到任何可以追溯到 IService 起源的类,但是那些显式实现 IMenuItem 的类可以说名称,当解析为 IService 时,它​​只会获取 IService 属性而不包括IMenuItem 属性。那是在哪里。container.Register(types.ToArray()).AsRespectiveImplementations() 会派上用场。但是这个问题有什么地方吗?或者这是一个必须编写来扩展 TinyIOC 的实用程序?

编辑2:

然后我们搬到了一个扩展,但我们仍然没有得到任何解决。

我传递了正确的值,在上面的 Container.Register 中,我们有 InterfaceTypeArgument = IMenuItem, t = EchoMenu : IMenuItem, Name = "EchoMenu" 但是当我们要求容器在注册 EchoMenu 作为其实现后解析 IMenuItem 时,我们会返回 null从解决所有。

有什么想法吗?

0 投票
1 回答
2192 浏览

c# - 使用 TinyIoC 使用构造函数参数解析具体类型

我有一个 Nancy API,并创建了一个继承自DefaultNancyBootstrapper.

我也有具体类型ConcreteFoo,我想在请求范围内绑定到 self 并传递特定的构造函数参数。

我的自定义引导程序如下:

为了解决ConcreteFoo所需的构造函数参数,我使用了TinyIoC Wiki中提供的示例。我注意到代码从我的自定义引导程序中的覆盖传递,如果我写下面的代码,那response就是真的。

但是,在应用程序引导时出现异常。下面列出了 inner-inner-inner... (很多内部)异常,并声明它无法创建ConcreteFoo并且无法解决System.Int32

我发现了这个相关问题,但它指的是注册接口而不是具体类型。

我做错了什么,还是您熟悉另一种解决具体类型并提供构造函数参数的方法?

0 投票
2 回答
823 浏览

nancy - 是否可以将属性注入与 Nancyfx 默认的 TinyIoc 容器一起使用?

是的,我知道,最好使用构造函数注入,而且我大部分时间都在使用它,但是在这种情况下,我喜欢使用属性注入:

我有一个存储库基类,它具有数据库工厂的依赖项以及读取应用程序设置的服务(ConfigurationManager 的抽象)

我不想在这里使用构造函数依赖项,因为这将迫使我将构造函数添加到我的所有存储库中,我可以这样做,但我不想这样做。更糟糕的问题是,如果出于某种原因我向 RespositoryBase 类添加了一个日志服务,我将不得不将此新依赖项添加到我所有存储库类的构造函数中,这并不酷。

我可以使用服务聚合之类的模式来避免修改 RepositoryBase 类,但这似乎太复杂了,我真的很喜欢让事情保持简单,这样每个人都可以理解发生了什么(包括我)。

那么,是否可以让 Nancy / TinyIOC 注入这些依赖项?

0 投票
1 回答
164 浏览

c# - TinyIoC 注册未知类型的实例

我试图允许我的库的用户(通过 tinyioc 内部连接)传入他们自己在我的库中定义的接口的实现,然后在需要实例时解析该接口。

例如,用户可以这样做:

在我的库中,我想连接传入的记录器。比如:

但是,我找不到 TinyIoc 让我这样做的方法。这支持吗?我知道 TinyIoc 支持注册它知道的类型的实例,但如果类型未知,则不支持。

0 投票
1 回答
146 浏览

c# - 如何从主实例处理 DI 注入链

https://github.com/int6/CoiniumServ/blob/develop/src/CoiniumServ/Pools/Pool.cs

这是我的泳池课。当我处理课程时,我想要那个。所有依赖项都应该停止工作并自行处理。

我尝试对所有依赖项实施 idisposable 来处理,但它不起作用。

我还实现了一个线程以在线程中运行函数并通过线程中止将其销毁。那也行不通。

有没有其他方法可以做到这一点?

0 投票
1 回答
614 浏览

c# - 为使用 NancyContext 的 Nancy 注册序列化程序

我想为我的 Nancy 模块使用自定义序列化,它使用请求的 URL 作为其输入的一部分。

我已经看到您需要在 ConfigureRequestContainer 的覆盖中注册使用上下文的依赖项(如C# IOC 和 NancyFX 中的请求状态中所回答)

而且我已经看到您可以使用 IRegistrations 接口为 Nancy 指定不同的序列化器(如使用 Nancy TinyIoC 配置 JsonNetSerializer 和 JsonNetBodyDeserializer 中所回答的)

如果我以第一种方式注册我的序列化程序,我无法让 Nancy 将它用于 JSON 序列化。

如果我以第二种方式注册它,我将无法注入当前 NancyContext 的副本并获取对请求的访问权限——它甚至会在调用该方法之前尝试创建序列化程序的实例。ConfigureRequestContainer

我在这里想念什么?

0 投票
1 回答
1905 浏览

c# - Nancy IoC 每个请求自动注册

我们有一个用 Nancy(和 TinyIoc)实现的 ASP.NET REST 服务,它与一个相当大的遗留应用程序接口。我们想过渡到完全依赖注入。目前,我们的大多数模块都直接实例化控制器,并使用一个上下文类来保存使用该NancyContext Context属性的请求信息。像这样的东西:

我们想直接在模块中注入控制器,并让所有事情都由 super-duper-happy-path 处理:)

我们的问题都源于我们需要来自NancyContext. url、headers 等。所以我们尝试了各种方法来实现依赖注入的必杀技。

尝试注入控制器失败,因为它们是在应用程序范围内实例化的,因此任何依赖RequestContext都不会具有当前上下文信息。即使注册RequestContextConfigureRequestContainer没有波及所有的家属,他们会持有对过期的引用RequestContext

我们尝试使用 属性注入上下文IRequestStartup,这似乎是成功的,直到我们遇到并发问题。不同线程中的同时请求会覆盖应用程序范围RequestContext

我们发现我们可以调用container.AutoRegister()ConfigureRequestContainer但这导致了严重的延迟,因为注册需要几秒钟的时间来处理我们拥有的类型数量。

使用AsPerRequestSingleton()inConfigureApplicationContainer似乎它会注册一次,然后根据请求实例化,但似乎没有办法让自动注册遵守这一点。

似乎我们需要手动注册所有类型,并手动更新此配置。是这样吗?我们真的希望在每个请求的生命周期内进行某种类型的自动注册。

我创建了一个小型测试项目 ( https://github.com/Rassi/NancyIocTest ),我在其中尝试了其中一些解决方案。

0 投票
0 回答
330 浏览

c# - NancyFx 模块中的属性注入

例如,我有 NacyModule 之类的:

我现在关于构造函数注入,它工作正常,但是有没有办法property injection在 Nancy 模块中使用(TinyIoC,Autofac 没关系)?

0 投票
2 回答
951 浏览

c# - TinyIOC 使用注册类型和指定类型的构造函数注册类

我想在其构造函数中注册一个使用先前注册类型的类,但也有一个需要指定的构造函数参数。

ConnectionEngine 需要使用 new BackgroundWorkerPoll(1000) 创建。我该怎么做呢?

0 投票
1 回答
2814 浏览

c# - Nancy 使用构造函数参数创建单例

我正在使用 Nancy 和 TinyIoC 来解决依赖关系。

特别需要一个依赖项是应用程序生命周期单例。

如果我使用默认构造函数执行此操作,则它可以工作:

但是如果我在构造函数上使用一些参数来尝试这个,它不会:

但是.AsSingleton(),它又可以工作了,但是我没有得到一个单身人士:

有任何想法吗?我认为错误应该很明显,但我找不到。我已经用完了我所有的 google-foo。


编辑

代码在这里运行: