【问题标题】:DryIoC register configurationDryIoC 寄存器配置
【发布时间】:2020-07-08 11:44:45
【问题描述】:

我正在使用 Prism 和 DryIoC 进行 Xamarin 项目。

目前我正在设置一些特定于环境的自定义配置,但是我正在努力使用 IoC 语法。

我的 App.xaml.cs 中有以下代码:

private void SetConfiguration(IContainerRegistry containerRegistry)
        {
            // Get and deserialize config.json file from Configuration folder.
            var embeddedResourceStream = Assembly.GetAssembly(typeof(IConfiguration)).GetManifestResourceStream("MyVismaMobile.Configurations.Configuration.config.json");
            if (embeddedResourceStream == null)
                return;

            using (var streamReader = new StreamReader(embeddedResourceStream))
            {
                var jsonString = streamReader.ReadToEnd();
                var configuration = JsonConvert.DeserializeObject<Configuration.Configuration>(jsonString);

                What to do with configuration, in order to DI it?
            }

我应该如何处理配置变量来注入它? 我尝试了以下方法:

containerRegistry.RegisterSingleton<IConfiguration, Configuration>(c => configuration);
containerRegistry.Register<IConfiguration, Configuration>(c => configuration));

但是dryIoC的语法有问题。

【问题讨论】:

    标签: xamarin prism dryioc


    【解决方案1】:

    RegisterSingletonRegister 用于注册 types 容器将在其中创建实例。你已经有了你的实例,所以你使用

    containerRegistry.RegisterInstance<IConfiguration>( configuration );
    

    显然,实例总是单例的,所以没有单独的RegisterInstanceSingleton...

    【讨论】:

    • 这很有意义。谢谢!
    • 如果我要实现一个自定义的 HttpClient 会是相同的步骤吗?在这种情况下,我想在执行 DI 时设置 BaseAddress。我可以新建一个 httpclient,设置基地址,然后使用 registerInstance 添加它。但是,是否可以像我习惯的那样给出一个参数: services.AddHttpClient(client => { client.BaseAddress = new Uri(mleCoreBaseUrl); })
    • 您可以使用Create 方法创建类似IClientFactory 的接口,我想这是最简单和最清晰的方法。
    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多