依赖注入的优点

(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;//打开窗口方法1var 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相关推荐

  1. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  2. ASP.NET Core 中的依赖注入

    什么是依赖注入 软件设计原则中有一个依赖倒置原则(DIP),为了更好的解耦,讲究要依赖于抽象,不要依赖于具体.而控制反转(Ioc)就是这样的原则的其中一个实现思路, 这个思路的其中一种实现方式就是依赖 ...

  3. winform防止sqlserver注入_ASP.NET Core 中的 依赖注入介绍

    ASP.NET Core 依赖注入 HomeController public class HomeController : Controller { private IStudentReposito ...

  4. 拥抱.NET Core系列:依赖注入(2)

    上一篇"拥抱.NET Core系列:依赖注入(1)大体介绍了服务注册.获取和生命周期,这一篇来做一些补充.由于内容跨度大(.NET Core.ASP.NET Core),所以文章并不是非常的 ...

  5. aspx 使用什么中间件_.NET Core中间件与依赖注入的一些思考

    点击上方蓝字"小黑在哪里"关注我吧 1.起源? 为什么会有这篇文章呢? 源于我看了老A的aspnet core 3 框架揭秘[1]请求管道 篇产生的疑惑? 三点疑惑: Single ...

  6. .NET Core中间件与依赖注入的一些思考

    点击上方蓝字"小黑在哪里"关注我吧 1.起源? 为什么会有这篇文章呢? 源于我看了老A的aspnet core 3 框架揭秘[1] 请求管道 篇产生的疑惑? 三点疑惑: Singl ...

  7. ASP.NET Core MVC 之依赖注入 Controller

    ASP.NET Core MVC 控制器应通过构造函数明确地请求它们地依赖关系,在某些情况下,单个控制器地操作可能需要一个服务,在控制器级别上的请求可能没有意义.在这种情况下,也可以将服务作为  Ac ...

  8. ASP.NET Core 下的依赖注入(一)

    本文介绍利用 Microsoft.Extensions.Configuration.Binder.dll 来实现超级简单的注入. 1. appsettings.json 中定义配置 假设我们有如下配置 ...

  9. C# (.NET Core)的DI依赖注入

    依赖注入 B站杨中科老师的.NET(6.0)依赖注入教学 引言 举一个例子,现在都在流行一个叫做自立更生的词汇,一定规模型的企业,都会可以在研究自己的专利技术,降低自己过度依赖于其他企业.从而从这个市 ...

最新文章

  1. ASP.NET 程序中常用的三十三种代码(2)
  2. 使用mnist数据集_使用MNIST数据集上的t分布随机邻居嵌入(t-SNE)进行降维
  3. 【数据结构与算法】二叉树基本算法锦集
  4. 极大似然估计_一文读懂矩估计,极大似然估计和贝叶斯估计
  5. 1.Office 365系列(-)
  6. IE8 默认以Web Standards模式显示网页 全面遵循Web标准
  7. 00_kubernetes组件版本和配置策略
  8. 频率采样型滤波器matlab,频率采样法设计带通滤波器matlab.doc
  9. 阿里云服务器搭建后台(Ubuntu)
  10. day09、1 - 简单渗透测试流程
  11. html img标签alt属性吗,img标签可以不用alt属性吗
  12. QEMUKVM 虚拟机使用实例
  13. Javascript中click与blur事件的顺序详析
  14. K-近邻算法之K值的选择(带案例)
  15. 【JDK源码剖析】Queue--队列 PriorityQueue--优先队列
  16. 基于SSM的二手书推荐系统(商城)
  17. 计算机释放磁盘空间常用方法,释放硬盘空间的常用方法 【计算机与医学】
  18. stm32外部中断模式控制灯亮灭
  19. win10更新卡住不动_为什么推荐win7升级到win10?两个电脑系统有什么区别
  20. 第一次尝试-试用CSDN模板

热门文章

  1. Servlet创建时机
  2. R语言和hadoop
  3. Spring微服务间登录用户信息共享思路
  4. java九宫排序,蓝桥杯 历届试题 九宫重排 java
  5. 电脑软件:office文档密码了怎么办,看完你就能自己找回了
  6. 基于ISO13400 (DoIP) 实现车辆刷写
  7. Pytorch学习(三)Linear层
  8. 服务器结构中的1U 2U 3U是什么意思
  9. PQ-多表合并自动更新(笔记)
  10. 学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况!