【问题标题】:Create a interface and inject with SimpleIoc创建一个接口并使用 SimpleIoc 注入
【发布时间】:2020-12-20 13:55:48
【问题描述】:

我创建了一个 AppConfig 类:

public class AppConfig
{
    private readonly IConfigurationRoot _configurationRoot;

    public AppConfig()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Package.Current.InstalledLocation.Path)
            .AddJsonFile("appsettings.json", optional: false);

        _configurationRoot = builder.Build();
    }

    private T GetSection<T>(string key) => _configurationRoot.GetSection(key).Get<T>();

    public Config Config => GetSection<Config>(nameof(Config));
}

我在我的 ViewModels 中这样使用它:

var config = new AppConfig();

但是有没有更好的方法来使用依赖注入。

这样我就可以像其他服务一样将它添加到 ViewModelLocator 中了吗?

public ViewModelLocator()
{
    SimpleIoc.Default.Register<ITestService, TestService>();

    SimpleIoc.Default.Register<MainViewModel>();
}

或者您将如何在带有 MvvmLightLibsStd10 的 UWP 应用程序中执行此操作?

【问题讨论】:

    标签: c# dependency-injection uwp configuration mvvm-light


    【解决方案1】:

    在抽象所需类的接口中创建。

    public interface IAppConfig {
        Config Config { get; }
    }
    

    从接口派生类

    public class AppConfig : IAppConfig {
        //...omitted for brevity
    }
    

    并将抽象和实现注册到容器中

    //...
    
    SimpleIoc.Default.Register<IAppConfig, AppConfig>();
    
    //...
    

    任何需要使用配置的类都可以通过构造函数注入显式依赖它

    【讨论】:

    • 嘿,确实,工作完美。很简单,但我总是让它变得更加困难。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    相关资源
    最近更新 更多