.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro

Posted シ゛甜虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro相关的知识,希望对你有一定的参考价值。

依赖注入的优点

(1)有效地设计服务及其依赖关系。

(2)防止多线程问题。

(3)防止内存泄漏。

(4)防止潜在的错误。

Caliburn.Micro主要用在MVVM, WPF, WinRT, UWP, Xamarin, android, ios, CoC, Convention, MVP, PM, Screen, Coroutine, Behavior, Model-View-ViewModel, Presentation, UI, ViewModel, Caliburn就是说控制台应用是用不了Caliburn.Micro的

代码下载

UnityDataServiceGui_20220316-C#文档类资源-CSDN下载UnityDataServiceGui_20220316更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/g313105910/84993382

一、创建项目

创建WPF项目,使用.net6

引入Caliburn.Micro

新建Bootstrapper类,内容如下

using Caliburn.Micro;
using FileLogger;
using System;
using System.Collections.Generic;
using UnityDataServiceGui.Modules.Main.ViewModels;

namespace UnityDataServiceGui

    public class Bootstrapper : BootstrapperBase
    
        private SimpleContainer _container;

        public Bootstrapper()
        
            Initialize();
        

        protected override void Configure()
        
            _container = new SimpleContainer();
            _container.Singleton<IWindowManager, WindowManager>();
            _container.Singleton<IEventAggregator, EventAggregator>();
            _container.Singleton<Log4netLogger>();
            //一定要注入进去,否则打不开窗体
            _container.Singleton<MainWindowViewModel>();

        
        protected override object GetInstance(Type service, string key)
        
            return _container.GetInstance(service, key);
        

        protected override IEnumerable<object> GetAllInstances(Type service)
        
            return _container.GetAllInstances(service);
        

        protected override void BuildUp(object instance)
        
            _container.BuildUp(instance);
        

        protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
        
            try
             
                var logger = IoC.Get<Log4netLogger>();
                logger.Initialize("UnityDataServiceGui");
                logger.LogLevel = LoggingEventType.Debug;
                //打开窗口方法1
                var windowManager = IoC.Get<IWindowManager>();
                var mainWindows = IoC.Get<MainWindowViewModel>();
                windowManager.ShowWindowAsync(mainWindows);
                //打开窗口方法2
                //DisplayRootViewFor<MainWindowViewModel>();
            
            catch (Exception ex)
            
                Console.WriteLine(ex);
            
        
    

引入依赖

新建目录、窗体、mode,MainWindowViewModel和MainWindowView的名称是约定俗成

MainWindowViewModel.cs引入Caliburn.Micro

修改App.xmal,必须添加<local:Bootstrapper x:Key="Bootstrapper"/>,作为启动项

<Application x:Class="UnityDataServiceGui.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:UnityDataServiceGui">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <local:Bootstrapper x:Key="Bootstrapper"/>
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

二、运行项目 

三、日志接口注入测试

项目改成控制台应用程序,这样可以看到Console输出

测试代码

namespace UnityDataServiceGui.Modules.Main.ViewModels

    public class MainWindowViewModel : Screen
    
        readonly Log4netLogger _logger;
        public MainWindowViewModel(Log4netLogger logger)
        
            _logger = logger;
            _logger.Warn(typeof(MainWindowViewModel),"这是一个测试程序!");
        
    

测试

以上是关于.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro的主要内容,如果未能解决你的问题,请参考以下文章

.Net or .Net Core依赖注入实现Microsoft.Extensions.DependencyInjection

.NET6-Asp.Net Core webapi -从零开始的webapi项目

.NET6-Asp.Net Core webapi -从零开始的webapi项目

.NET6-Asp.Net Core webapi -从零开始的webapi项目

.NET6-Asp.Net Core webapi -从零开始的webapi项目

.NET Core/.NET5/.NET6 开源项目汇总3:工作流组件