问题标签 [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.
dryioc - 创建一个备用容器/解析器 DryIoc
目前正在创建一个 Prism.DryIoc.Forms 项目以尝试 DryIoc(第一次!)。
在 Xamarin.Forms 中有一个本机 DependencyService 并提供一种迁移到使用 Prism 的好方法,我想将其添加为备用容器,以防无法从主容器解析请求的服务类型。
当前,我创建了一个FallbackContainer
并传递了实例,IContainer
并覆盖了方法IResolver
并将其余IContainer
调用委托给创建期间传递的实例。
所以在创建和配置默认容器之后,然后执行
这是首选方法还是有什么方法可以附加默认值IResolver
?
当前实施
感谢并期待测试 DryIoc,因为我读过它应该是最快的
c# - DryIoc - 在使用键名注册基类时解析派生类
试图在 Prism.Forms ( https://github.com/joacar/Prism/tree/pr-517 ) 中建立对 DryIoc 的支持,并偶然发现了一个我无法弄清楚该怎么做的场景。
长话短说,问题归结为:在 Prism.DryIoc.Forms 中创建新应用程序时,会创建 PrismApplicationBase 的应用程序子类并覆盖某些方法,其中之一是 RegisterTypes。
调用时,用户可以注册导航视图
在导航期间,一个类DryIocPageNavigationService
参与其中并且有一个方法可以覆盖protected Page CreatePage(string name) { ... }
问题来了:此时我们只知道Page
使用 IContainer 解决给定“名称”的实现。
但是,如果以这种方式实现扩展方法
页面得到解决。然而,这限制了TPage
具有默认的空构造函数(或做一些聪明/不需要的黑客行为)
嗯,短篇小说会很长:)
最好的祝福
dryioc - DryIoc,如果设置默认值,如何注册transcient重用(又名null)?
使用dryIoc,我已经注册了我的容器:
但是,我必须注册 transcient 元素,并且由于Reuse.Transcient
== null,它被我设置的默认值替换(因此Reuse.Singleton
)。我该如何克服呢?
c# - DryIoc.WebApi 设置
我正在探索 DryIoc 在 .NET WebAPI 应用程序中的使用,并注意到初始化步骤有一个奇怪的行为。在一个简单的测试 webapi 应用程序中,我有以下 DryIoc 注册类,它在 WebApi 配置注册后立即被调用。
以及以下 WebApi 控制器:
这似乎工作正常,但在试验中似乎是相同的,但写得更冗长,代码我得到一个错误。
我得到的异常如下(作为 JSON):
这对 DryIoc 来说是不是有些奇怪,或者这是我从未遇到过的 C# 细微差别?
c# - 属性注入的 DryIOC 容器配置
我已经广泛搜索了一个如何配置 DryIoc 容器以简单地将依赖项作为属性注入的简单示例,就像它注入构造函数参数一样。
鉴于以下工作示例...
容器注册:
小部件服务:
小部件存储库:
配置需要如何更改以支持看起来像这样的 WidgetService,其中 DryIoc 将 WidgetRepository 作为属性注入?
所需的小部件服务:
失败的尝试
我已经尝试过这些配置更改,但它们似乎对在 WidgetService 上启用属性注入没有影响。
尝试1:
尝试 2:
我也试过上面的方法PropertiesAndFields.All
,也没有运气。
注意:我知道属性注入不是推荐的方法,并且由于许多原因,构造函数注入是首选。但是,我想知道如何正确地做到这两点。
更新
按照@dadhi 的建议,我更改了尝试#2 来初始化容器,如下所示:
但后来我收到了这个错误:
DryIoc 现在似乎正在尝试使用我没有的无参数构造函数来初始化我的 WidgetController。我假设由于规则更改为 PropertiesAndFields.All(...)
,DryIoc 正在尝试对所有注册项目使用属性注入。
我试图使用属性注入来初始化 WidgetService(如上所示),但 WidgetController 使用构造函数注入。也许我不能两者都做,但我认为PropertiesAndFields.Auto
规则会允许两者。我也更改了 WidgetController 以设置属性注入。然后我没有从 DryIoc 中得到任何异常,但 WidgetService 在 WidgetController 中最终为空。这是更新后的 WidgetController。
自动属性注入似乎仍然难以捉摸。
更新 2
经过多次试验和错误(以及来自@dadhi 的建议),我决定在我的 WidgetController 中使用构造函数注入,并在注册其他服务时指定属性注入。这允许随着时间的推移将使用属性注入的代码迁移到构造函数注入,但控制器除外。这是我更新的容器注册:
我很想最终找出适用于控制器和其他服务的黄金设置,但它们的行为似乎不同。但是,目前这是一个足够可行的解决方案。
更新 3
根据@dadhi 的建议将容器配置更新为以下内容,再次尝试将所有内容(包括 WidgetController)连接为属性注入:
这似乎至少产生了一个有意义的异常,并且也许可以解释为什么在我设置要使用的容器时控制器被视为不同PropertiesAndFields.All(..)
:
c# - DryIoc 与 Serilog - 设置日志记录上下文
我们目前正在使用 Autofac 并利用 AutofacSerilogIntegration 在将 ILogger 注入混凝土时自动设置日志记录上下文。集成使用记录器注入的类型设置记录上下文。这在 Autofac 中并不难,因为有一个“准备”事件可用于任何分辨率......所以 ILogger 的分辨率可以被拦截,并且 ILogger 可以在此时增强,Autofac 允许包含类型从这个拦截器中可以确定。这是代码: https ://github.com/nblumhardt/autofac-serilog-integration/blob/master/src/AutofacSerilogIntegration/ContextualLoggingModule.cs
我已经在 DryIoc 中看到了拦截的可用性,但没有像 Autofac 方法那么简单。在 DryIoc 中,看起来必须为每个注入要被拦截的类型的混凝土注册拦截器。 https://bitbucket.org/dadhi/dryioc/wiki/Decorators#markdown-header-decorator-as-interceptor-with-castle-dynamicproxy
有人对在 DryIoc 中解决此问题的最佳方法有建议吗?这是否可能以一种相对通用和高效的方式实现?查看 DryIoc 文档后,我没有看到直接的方法,因为我没有看到可以在某种通用拦截器中确定注入的类的地方(并且可以全局应用) . 我显然不想从我的记录器中检查调用堆栈,因为众所周知这非常慢。
谢谢
dryioc - DryIoc 无法解析我的布尔实例?
我尝试注册一个构造函数需要几个字符串、一个 ILog 和一个布尔值的类。我的容器中的所有内容都注册为单例(设置为默认重用)。
但是每当我尝试获取该类的实例时,container.Resolve<AzmanAccess>()
就会引发异常。
无法将布尔值解析为 Company.Common.Util.Authentication.AzmanAccess 中的参数“accessAll”:Company.Common.Util.Authentication.IAzmanAccess {RequiredServiceType=Company.Common.Util.Authentication.AzmanAccess} 作为 Company 中的参数“azmanAccess”。 Common.Util.Authentication.AzmanCustomAccess:Company.Common.Util.Authentication.IAccess 作为 Company.Common.Util.Authentication.User 中的参数“访问”:Company.Common.Util.Authentication.IUser 其中 CurrentScope:null 和 ResolutionScope:null并找到注册:skipAuthz,{ID=53, ImplType=Boolean, Reuse=SingletonReuse {Lifespan=1000}}} System.Object,{ID=25, ImplType=Boolean, Reuse=SingletonReuse {Lifespan=1000}}}
我这样注册我的课程:
构造函数是:
其中 servicekeys (AccessAll, ...) 是唯一的(尝试使用对象,然后是字符串)。
怎么了?
spring.net - DryIoc,Spring.Net 的 GetObjectsOfType 等价物?
使用 Spring.Net,可以查询某个(祖先)类型的所有对象。
DryIoc 如何做到这一点?
code-readability - 懒惰的使用 DryIoc,我做得对吗?
我需要能够使用 DryIoc 来创建 Lazy 对象。
因为我正在使用一个使用 God 对象并依赖于复杂 Dictionary 的遗留应用程序KeyPair<string, SomeAbstractType>
,所以我想用Lazy<SomeAbstractType>
对应的值替换每个值并让应用程序加载速度更快。
我已经以这种方式完成了 POCO,但由于我远未掌握 DryIoc,因此我可能做得过火了。
这是我希望您能够阅读的代码。
编辑[答案]:
它可以以更简单的方式实现 XD。
dryioc - 解决依赖项时覆盖某些实现
我已阅读文档,但找不到任何关于解析类型并同时覆盖其某些依赖项的信息。举个例子最容易说明
是否有意义?正在寻找类似的东西
DryIoc 做得很好
编辑(2016-05-26)我的问题具有误导性。下面是完整的代码示例(对于prism)