.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

.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro_第1张图片

引入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();
            _container.Singleton();
            _container.Singleton();
            //一定要注入进去,否则打不开窗体
            _container.Singleton();

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

        protected override IEnumerable 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();
                logger.Initialize("UnityDataServiceGui");
                logger.LogLevel = LoggingEventType.Debug;
                //打开窗口方法1
                var windowManager = IoC.Get();
                var mainWindows = IoC.Get();
                windowManager.ShowWindowAsync(mainWindows);
                //打开窗口方法2
                //DisplayRootViewFor();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}

引入依赖

.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro_第2张图片

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

.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro_第3张图片

MainWindowViewModel.cs引入Caliburn.Micro

.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro_第4张图片

修改App.xmal,必须添加,作为启动项


    
        
            
                
                    
                
            
        
    

二、运行项目 

.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro_第5张图片

三、日志接口注入测试

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

.Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro_第6张图片

测试代码

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_第7张图片

你可能感兴趣的:(.Net,.netcore)