问题标签 [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.
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从解决所有。
有什么想法吗?
c# - 使用 TinyIoC 使用构造函数参数解析具体类型
我有一个 Nancy API,并创建了一个继承自DefaultNancyBootstrapper
.
我也有具体类型ConcreteFoo
,我想在请求范围内绑定到 self 并传递特定的构造函数参数。
我的自定义引导程序如下:
为了解决ConcreteFoo
所需的构造函数参数,我使用了TinyIoC Wiki中提供的示例。我注意到代码从我的自定义引导程序中的覆盖传递,如果我写下面的代码,那response
就是真的。
但是,在应用程序引导时出现异常。下面列出了 inner-inner-inner... (很多内部)异常,并声明它无法创建ConcreteFoo
并且无法解决System.Int32
。
我发现了这个相关问题,但它指的是注册接口而不是具体类型。
我做错了什么,还是您熟悉另一种解决具体类型并提供构造函数参数的方法?
nancy - 是否可以将属性注入与 Nancyfx 默认的 TinyIoc 容器一起使用?
是的,我知道,最好使用构造函数注入,而且我大部分时间都在使用它,但是在这种情况下,我喜欢使用属性注入:
我有一个存储库基类,它具有数据库工厂的依赖项以及读取应用程序设置的服务(ConfigurationManager 的抽象)
我不想在这里使用构造函数依赖项,因为这将迫使我将构造函数添加到我的所有存储库中,我可以这样做,但我不想这样做。更糟糕的问题是,如果出于某种原因我向 RespositoryBase 类添加了一个日志服务,我将不得不将此新依赖项添加到我所有存储库类的构造函数中,这并不酷。
我可以使用服务聚合之类的模式来避免修改 RepositoryBase 类,但这似乎太复杂了,我真的很喜欢让事情保持简单,这样每个人都可以理解发生了什么(包括我)。
那么,是否可以让 Nancy / TinyIOC 注入这些依赖项?
c# - TinyIoC 注册未知类型的实例
我试图允许我的库的用户(通过 tinyioc 内部连接)传入他们自己在我的库中定义的接口的实现,然后在需要实例时解析该接口。
例如,用户可以这样做:
在我的库中,我想连接传入的记录器。比如:
但是,我找不到 TinyIoc 让我这样做的方法。这支持吗?我知道 TinyIoc 支持注册它知道的类型的实例,但如果类型未知,则不支持。
c# - 如何从主实例处理 DI 注入链
https://github.com/int6/CoiniumServ/blob/develop/src/CoiniumServ/Pools/Pool.cs
这是我的泳池课。当我处理课程时,我想要那个。所有依赖项都应该停止工作并自行处理。
我尝试对所有依赖项实施 idisposable 来处理,但它不起作用。
我还实现了一个线程以在线程中运行函数并通过线程中止将其销毁。那也行不通。
有没有其他方法可以做到这一点?
c# - 为使用 NancyContext 的 Nancy 注册序列化程序
我想为我的 Nancy 模块使用自定义序列化,它使用请求的 URL 作为其输入的一部分。
我已经看到您需要在 ConfigureRequestContainer 的覆盖中注册使用上下文的依赖项(如C# IOC 和 NancyFX 中的请求状态中所回答)
而且我已经看到您可以使用 IRegistrations 接口为 Nancy 指定不同的序列化器(如使用 Nancy TinyIoC 配置 JsonNetSerializer 和 JsonNetBodyDeserializer 中所回答的)
如果我以第一种方式注册我的序列化程序,我无法让 Nancy 将它用于 JSON 序列化。
如果我以第二种方式注册它,我将无法注入当前 NancyContext 的副本并获取对请求的访问权限——它甚至会在调用该方法之前尝试创建序列化程序的实例。ConfigureRequestContainer
我在这里想念什么?
c# - Nancy IoC 每个请求自动注册
我们有一个用 Nancy(和 TinyIoc)实现的 ASP.NET REST 服务,它与一个相当大的遗留应用程序接口。我们想过渡到完全依赖注入。目前,我们的大多数模块都直接实例化控制器,并使用一个上下文类来保存使用该NancyContext Context
属性的请求信息。像这样的东西:
我们想直接在模块中注入控制器,并让所有事情都由 super-duper-happy-path 处理:)
我们的问题都源于我们需要来自NancyContext
. url、headers 等。所以我们尝试了各种方法来实现依赖注入的必杀技。
尝试注入控制器失败,因为它们是在应用程序范围内实例化的,因此任何依赖RequestContext
都不会具有当前上下文信息。即使注册RequestContext
并ConfigureRequestContainer
没有波及所有的家属,他们会持有对过期的引用RequestContext
。
我们尝试使用 属性注入上下文IRequestStartup
,这似乎是成功的,直到我们遇到并发问题。不同线程中的同时请求会覆盖应用程序范围RequestContext
。
我们发现我们可以调用container.AutoRegister()
,ConfigureRequestContainer
但这导致了严重的延迟,因为注册需要几秒钟的时间来处理我们拥有的类型数量。
使用AsPerRequestSingleton()
inConfigureApplicationContainer
似乎它会注册一次,然后根据请求实例化,但似乎没有办法让自动注册遵守这一点。
似乎我们需要手动注册所有类型,并手动更新此配置。是这样吗?我们真的希望在每个请求的生命周期内进行某种类型的自动注册。
我创建了一个小型测试项目 ( https://github.com/Rassi/NancyIocTest ),我在其中尝试了其中一些解决方案。
c# - NancyFx 模块中的属性注入
例如,我有 NacyModule 之类的:
我现在关于构造函数注入,它工作正常,但是有没有办法property injection
在 Nancy 模块中使用(TinyIoC,Autofac 没关系)?
c# - TinyIOC 使用注册类型和指定类型的构造函数注册类
我想在其构造函数中注册一个使用先前注册类型的类,但也有一个需要指定的构造函数参数。
ConnectionEngine 需要使用 new BackgroundWorkerPoll(1000) 创建。我该怎么做呢?
c# - Nancy 使用构造函数参数创建单例
我正在使用 Nancy 和 TinyIoC 来解决依赖关系。
特别需要一个依赖项是应用程序生命周期单例。
如果我使用默认构造函数执行此操作,则它可以工作:
但是如果我在构造函数上使用一些参数来尝试这个,它不会:
但是.AsSingleton()
,它又可以工作了,但是我没有得到一个单身人士:
有任何想法吗?我认为错误应该很明显,但我找不到。我已经用完了我所有的 google-foo。
编辑
代码在这里运行: