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

.net - DryIoc:注册一个依赖的不同依赖

如何在注册语句中覆盖依赖项的依赖项?

例如:

我认为这是一个简单的问题,如果需要其他解释,我将编辑该问题。

0 投票
1 回答
424 浏览

asp.net-web-api2 - dryioc controller.service 在设置期间解决,而不是在 api 调用期间解决

我一直在在线搜索和调试,重新阅读dryioc的文档并查看示例。我认为我的问题不在于dryioc,或者我忽略了一个愚蠢的错误。

项目设置 => 服务 => owin + webapi2 使用属性路由、swagger 和 apiversioning

这就是我设置容器的方式

RegisterStoreServices 和 RegisterMetadata 都只包含单例或临时注册。

当我尝试在我的 API 控制器上调用控制器方法时,我收到以下错误

我知道在很多情况下,这是因为服务没有注册,但我注册了。

正如您在第一个代码片段中看到的那样,我验证、验证,甚至尝试了 container.openscope,以查看容器是否已注册。在容器上,我可以看到歌曲存储库也被填充。

所以我猜,不知何故,webapi 不使用注入容器的控制器。

我在依赖项设置中做错了吗?

我不确定这是否重要,但是在配置完其他所有内容之后,我正在设置容器。

0 投票
1 回答
341 浏览

dryioc - DryIoc:不同工厂的不同依赖条件

我试过这样的事情:

但是 DryIoc 只是注入了最后一个注册的 IConfigurationProvider 并忽略了条件。我简化了代码并替换了配置中的名称(是的,服务类已注册)。

更好的条件和 RequestInfo 文档会很好。

编辑:我现在假设,问题是我的工厂默认注册,而 DryIoc 只使用最后一个。

EDIT2:RequestInfo 到底代表什么?被请求的那个人?所以这意味着已配置?还是 RequestInfo.Parent 已配置?枚举什么?整个依赖树?

0 投票
1 回答
131 浏览

dryioc - DryIoc 容器中的解析状态

是否可以在 DryIoc 容器中确定是否已实例化某个单例?

例如

0 投票
1 回答
1064 浏览

xamarin.forms - 在 Prism.DryIoc 中使用视图模型注册视图的正确方法是什么

我正在使用适用于 Mac 的 Visual Studio 的 Prism 模板包生成一个新项目(已尝试共享和 pcl),然后更新到 7.0.0.340-ci。视图注册到视图模型是否按惯例完成?

当我尝试运行这个应用程序时,它会抛出这个异常:Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: Application windows are expected to have a root view controller at the end of application launch.

这是主应用程序的代码。

由于签名不兼容,我不得不注释掉底线并重做覆盖。

Container.RegisterTypeForNavigation 去了哪里或它的替代品是什么?

我也在 RegisterTypes 方法中尝试过没有任何代码。

在探索 NavigationService 属性的调试会话中说 MainPage 为空。

0 投票
2 回答
542 浏览

prism - XF + DryIoc:无法从实现类型 Xamarin.Forms.NavigationPage 中选择单个公共构造函数

我刚刚在 VS2017 中使用 Prism 模板创建了一个 XF + Prism + DryIoc 项目。我将应用 XF 和 Prism 更新到最新版本:

  • XF:2.5.0.121934
  • 棱镜:7.0.0.336-pre

无需添加任何更多代码(使用最新的 Prism 7 修复重大更改除外),运行应用程序时,我得到:

无法从实现类型 Xamarin.Forms.NavigationPage 中选择单个公共构造函数

我搜索了一下,发现https://github.com/PrismLibrary/Prism/issues/889但问题应该用最新的 DryIoc 解决。

有任何想法吗?

0 投票
1 回答
897 浏览

xamarin - Xamarin 形成链接器和 Prism.Dryioc

Soo,当我们使用 Xamarin Forms 时,我们想要一个小的 apk 大小。为了实现这一点,我们有 Linker 和 Proguard。

但是使用 Prism.Dryioc 我卡住了,我真的不知道如何正确设置我的链接配置文件。

有了上面我得到了这个例外:

01-03 17:14:04.526 I/MonoDroid(28121):未处理的异常:01-03 17:14:04.552 I/MonoDroid(28121):System.TypeInitializationException:“注册表”的类型初始化程序引发了异常。---> System.TypeInitializationException:“DryIoc.WrappersSupport”的类型初始化程序引发了异常。---> DryIoc.ContainerException:MethodInfo 类型的参数为空。01-03 17:14:04.552 I/MonoDroid(28121): 在 DryIoc.Throw.ThrowIfNull[T] (T arg, System.Int32 错误, System.Object arg0, System.Object arg1, System.Object arg2, System.对象 arg3) [0x0002b] 在:0 01-03 17:14:04.552 I/MonoDroid(28121):在 DryIoc.WrappersSupport..cctor () [0x0013e] 在:0 01-03 17:14:04.552 I/MonoDroid (28121):---内部异常堆栈跟踪结束---01-03 17:14:04.552 I/MonoDroid(28121):---内部异常堆栈跟踪结束---01-03 17:14: 04.

01-03 17:14:04.552 I/MonoDroid(28121): 在 Prism.PrismApplicationBase1[T].InitializeInternal () [0x00006] in:0 01-03 17:14:04.552 I/MonoDroid(28121): 在 Prism。 PrismApplicationBase1[T]..ctor(Prism.IPlatformInitializer1[T] 初始化程序)[0x00031] 在:0 01-03 17:14:04.552 I/MonoDroid(28121):在 Prism.DryIoc.PrismApplication.set_ModuleCatalog(Prism.Modularity。 IModuleCatalog value) [0x00000] in <5381f1aa51c04a43a2c056545e4b1214>:0 01-03 17:14:04.552 I/MonoDroid(28121): at Mobile.App..ctor (Prism.DryIoc.IPlatformInitializer initializer) [0x00000] in C:\Projetos \ECS_APP\Mobile\Mobile\App.xaml.cs:33 01-03 17:14:04.552 I/MonoDroid(28121): 在 Mobile.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x000b2] 在 C :\Projetos\ECS_APP\Mobile\Mobile.Android\MainActivity.cs:41 01-03 17:14:04.552 I/MonoDroid(28121): 在 Android.Support.V4.App。FragmentActivity.n_OnCreate_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x0000f] in <0c9457d7bcf04178944f1369257ca37d>:0 01-03 17:14:04.552 I/MonoDroid(28121 动态) System.Object:8b2e8b21-fb7e-4a04-a143-a1dc11f69d85 (intptr,intptr,intptr) 01-03 17:14:04.577 W/art (28121): JNI RegisterNativeMethods: 尝试为 android.runtime.JavaProxyThrowable 注册 0 个本机方法发生未处理的异常。577 W/art (28121):JNI RegisterNativeMethods:尝试为 android.runtime.JavaProxyThrowable 注册 0 个本机方法发生未处理的异常。577 W/art (28121):JNI RegisterNativeMethods:尝试为 android.runtime.JavaProxyThrowable 注册 0 个本机方法发生未处理的异常。

有人可以帮我找到使链接器工作的方法吗?

0 投票
1 回答
379 浏览

nancy - nancy selfhost,使用 Dryioc 和引导程序 -> 方法未找到异常

在工作中,我们需要一个小型应用程序,并决定对该项目也测试一些我们并不真正熟悉的东西。

我从一个控制台应用程序开始,使用 topshelf 通过 nancy 自托管包托管 nancy。所有这些都有效。

现在我想将 DryIoc 容器连接到 nancy 引导程序并得到以下错误:

我的引导程序:空的,还没有注册,因为我首先想在让它变得更复杂之前对其进行测试

在我的 .Start 方法中,通过 topshelf 分配引导程序的服务

new NancyHost(uri, new Bootstrapper(), hostConfig) 发生错误;一旦我将新的 Bootstrapper() 添加到参数中

0 投票
1 回答
478 浏览

c# - IoC 容器的协变服务解析

我在没有任何 IoC 容器的情况下为我的应用程序使用依赖注入模式。现在我决定使用一些 IoC 容器,因为我的 Composition Root 包含数千行代码,但我未能使其与积极使用方差的类一起工作。例如下面的界面

和服务

纯 DI 工作正常

但是 Autofac 和 DryIoc 都无法解决它。

我需要一些额外的设置吗?是否有任何其他 IoC 容器支持这一点?我要求太多了吗?

完整代码:https ://dotnetfiddle.net/vlw17R

0 投票
1 回答
1095 浏览

xamarin.forms - 在 Xamarin Forms 中使用 Prism 重新实例化单例

如何在 Xamarin Forms 中使用 Prism/DryIoC 处理和重新实例化单例?

我正在使用 Azure 移动应用程序来获取离线数据。偶尔,我需要删除本地的sqlite数据库并重新初始化它。不幸的是,MobileServiceClient 偶尔会保持数据库连接打开,并且没有公开方法来关闭它。建议的解决方案 ( https://github.com/Azure/azure-mobile-apps-net-client/issues/379 ) 是处置 MobileServiceClient。唯一的问题是它在 DryIoC 中注册为单例。

我对 DryIoC 或 Prism 和 Forms 并不太熟悉……但就我的一生而言,我看不到这样做的方法。

我确实制定了一个非常复杂的计划,几乎奏效了。

在我的 ViewModel 方法中,当我需要释放数据库时,我触发了一个事件 -

然后在 App.xaml.cs 中,我像这样连接了一个侦听器和一个处理程序 -

最后,回到 ViewModel 构造函数中,我有一个最终侦听器,它处理从 App.xaml 返回的事件并完成处理。

所以令人惊奇的是,这奏效了。数据库能够被删除,一切都很好。但后来我导航到不同的页面和 BOOM。DryIoC 表示它无法为该页面连接 ViewModel。我假设取消注册/注册会为所有注入提升 DryIoC ......那么我怎样才能完成需要做的事情呢?

最终解决方案

非常感谢爸爸抽出时间提供帮助。你当然是一个集体行为,我现在正在考虑在其他地方使用 DryIoC。

对于任何偶然发现此问题的人,我将在下面发布最终解决方案。我会尽可能详细地避免任何混淆。

首先,在我的 App.xaml.cs 中,我添加了一个注册数据库的方法。

我只是在 RegisterTypes 中添加对该方法的调用,而不是直接在其中注册类型。

还要注意根据 dadhi 为急切缓存添加的规则。

稍后当我需要在 ViewModel 中释放数据库时...我通过重置本地 db 变量并向 App.xaml.cs 发送事件来开始

在 App.xaml.cs 中,我订阅了该事件并将其绑定到以下方法。

这里我只是再次调用 RegisterMany,和我在应用程序启动时所做的完全一样。无需注销任何东西。使用 setup 和 ifAlreadyRegistered 参数(谢谢,dadhi!),DryIoC 允许替换对象。然后我向 VM 发起一个事件,让它知道数据库已被释放。

最后,回到 ViewModel,我正在监听完成的事件。该事件的处理程序像这样更新对象的本地副本。

_client = ((PrismApplication)App.Current).Container.Resolve<IAppMobileClient>();

然后我可以根据需要使用新对象。这是关键。如果没有在上面将 _client 设置为 null 并在此处再次解决它,我实际上最终得到了 2 个对象副本,并且对方法的调用被击中了 2 倍。

希望对希望发布其 Azure 移动应用数据库的其他人有所帮助!