dotnetcore3.1 WPF 中使用依赖注入

dotnetcore3.1 WPF 中使用依赖注入

Intro

在 ASP.NET Core 中默认就已经集成了依赖注入,最近把 DbTool 迁移到了 WPF dotnetcore 3.1,
在 WPF 中我们也希望能够使用依赖注入,下面来介绍一下如何在 WPF dotnetcore3.1 中使用依赖注入

App.xaml 配置

  1. 打开 App.xaml 文件,删除 StartupUri 配置, StartupUri="MainWindow.xaml"
  2. 打开 App.xaml.cs 重载 OnStartup 方法,在 OnStartup 中添加自己的初始化代码,在初始化代码中注册自己的服务注册 MainWindow,并在最后从服务中获取 MainWindow 服务,并调用 window 的 Show 方法
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        Init();
        base.OnStartup(e);
    }

    private void ConfigureServices(IServiceCollection services)
    {
        services.TryAddTransient<MainWindow>();
        services.AddJsonLocalization(options => options.ResourcesPathType = ResourcesPathType.CultureBased);
    }

    private void Init()
    {
        #region Init Settings

        var settings = new SettingsViewModel();
        settings.ConnectionString = settings.DefaultConnectionString;
        // set current culture
        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(settings.DefaultCulture);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(settings.DefaultCulture);

        #endregion Init Settings

        IServiceCollection services = new ServiceCollection();
        ConfigureServices(services);

       services.BuildServiceProvider()
            .GetRequiredService<MainWindow>()
            .Show();
    }
}

MainWindow

由于 MainWindow 上面我们已经修改为通过依赖注入来获取,所以我们可以在 MainWindow 的构造方法中注入我们所需要的服务即可

public partial class MainWindow: Window
{
    private readonly IStringLocalizer<MainWindow> _localizer;
    public MainWindow(
        IStringLocalizer<MainWindow> localizer)
    {
        InitializeComponent();

        _localizer = localizer;
    }
    // ...
}

Reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF 使用 log4net 实现依赖注入可以按照以下步骤进行: 1. 首先,确保你已经引入 log4net 库,并在你的项目配置好 log4net。 2. 在你的应用程序的入口点(通常是 App.xaml.cs 文件的 Application_Startup 方法),初始化 log4net。可以使用 `XmlConfigurator.Configure()` 方法来加载 log4net 的配置文件,或者使用 `BasicConfigurator.Configure()` 方法来使用默认的配置。例如: ```csharp using log4net; using log4net.Config; // ... public partial class App : Application { private static readonly ILog log = LogManager.GetLogger(typeof(App)); protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); XmlConfigurator.Configure(); // 或者 BasicConfigurator.Configure(); // ... 其他初始化代码 log.Info("Application started"); } } ``` 3. 创建一个接口来定义 log4net 的日志功能,例如 `ILogger` 接口: ```csharp public interface ILogger { void Debug(object message); void Info(object message); void Warn(object message); void Error(object message); void Fatal(object message); } ``` 4. 创建一个实现 `ILogger` 接口的 log4net 日志封装类: ```csharp using log4net; public class Log4NetLogger : ILogger { private readonly ILog log; public Log4NetLogger(Type type) { log = LogManager.GetLogger(type); } public void Debug(object message) { log.Debug(message); } public void Info(object message) { log.Info(message); } public void Warn(object message) { log.Warn(message); } public void Error(object message) { log.Error(message); } public void Fatal(object message) { log.Fatal(message); } } ``` 5. 在需要使用日志的类,通过构造函数注入 `ILogger` 接口的实例。例如: ```csharp public class MyClass { private readonly ILogger logger; public MyClass(ILogger logger) { this.logger = logger; } public void DoSomething() { logger.Info("Doing something..."); // 其他逻辑 } } ``` 这样,在创建 `MyClass` 的实例时,可以通过依赖注入容器(如 Unity、Autofac 等)来自动解析并注入 `ILogger` 的实例,从而实现对 log4net 的依赖注入。 请注意,这里使用了简单的示例来说明 log4net 的依赖注入,实际应用可能需要更复杂的配置和集成。具体的实现方式可能会根据你使用依赖注入容器和项目结构而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值