C#-了解IOC控制反转及相关框架的使用
创始人
2024-11-11 06:35:24
0

目录

一、了解IOC

1、概念

2、生命周期

二、使用

三、扩展-CommunityToolkit.Mvvm工具包

Messenger信使

方式一(收发消息)

方式二(收发消息)

方式三(请求消息)


一、了解IOC

IOC,即控制反转(Inversion of Control),它通过将对象的创建和管理责任从应用程序代码中转移到外部容器或框架中,实现了对象之间的松耦合和依赖性反转。

1、概念

  • 依赖注入(Dependency Injection, DI)

    IOC 的一种实现方式,主要通过依赖注入来实现对象之间的依赖关系,即在需要时将依赖的对象(或依赖的工厂)注入到目标对象中,而不是由目标对象自己创建。DI注入三方式:构造函数注入、属性注入、方法注入。
  • 容器(Container)

    IOC 容器是负责管理和注入对象的工具或框架,它可以配置、创建和组装对象,同时解决对象之间的依赖关系。常见的 IOC 容器包括 Spring Framework(Java)、Unity(C#)、Guice(Java)、Dagger(Android)等。
  • 松耦合(Loose Coupling)

    通过IOC,对象之间的依赖关系由外部容器来管理,使得对象之间的耦合度降低。这样,当需要改变某个对象的依赖关系时,只需调整配置,而不需要修改对象本身的代码。

2、生命周期

单例(Singleton)

单例生命周期保证在整个应用程序生命周期内只存在一个对象实例。无论有多少个请求,IOC 容器始终返回同一个实例。这种方式适合那些需要在应用程序中共享状态或资源的对象,确保了对象的唯一性和共享性。

services.AddSingleton

作用域(Scoped)

作用域生命周期指定对象的生命周期与特定的作用域相关联,例如每个 HTTP 请求或每个事务。在每个作用域内,只会创建一个对象实例,并且在作用域结束时销毁。这种方式在需要限定对象生命周期到特定范围内的情况下非常有用,例如在 Web 应用中处理请求时

services.AddScoped

瞬时(Transient)

瞬时生命周期意味着每次请求时都会创建一个新的对象实例。这种方式适合那些无需长时间维持状态的对象,每次请求都需要一个全新的、独立的对象实例。在 IOC 容器中,每次解析时都会创建一个新的对象。

services.AddTransient

二、使用

添加NuGet包:Microsoft.Extensions.DependencyInjection

        IServiceProvider serviceProvider;          ServiceCollection container=new ServiceCollection();          public void RegisterService()             where T : class             where TObject : class, T         {             container.TryAddSingleton();        //单例             //container.TryAddScoped();         //作用域             //container.TryAddTransient();      //瞬态             serviceProvider = container.BuildServiceProvider();         }          public T GetService() where T : class         {            return serviceProvider.GetService();         }

三、扩展-CommunityToolkit.Mvvm工具包

Messenger信使

用于不同界面传输数据 

方式一(收发消息)

1、创建消息 

  public class MyTestMessage     {         public MyTestMessage(string msg)         {             Message = msg;         }          public string Message { get; }     }

2、发布消息(某界面)

WeakReferenceMessenger.Default.Send(new MyTestMessage(sendMsg));

3、订阅消息(其它界面)

WeakReferenceMessenger.Default.Register(this, (r, m) =>  {     //处理接收到的消息     Message = m.Message; });

方式二(收发消息)

1、创建消息   

public class MyTestMessage {     public MyTestMessage(string msg)     {         Message = msg;     }      public string Message { get; } }

2、发布消息(某界面)

WeakReferenceMessenger.Default.Send(new MyTestMessage(sendMsg));

3、订阅消息(其它界面),实现接口IRecipient

    public class TargetViewModel:ObservableObject,IRecipient     {         public void Receive(MyTestMessage message)         {             //处理接收到的消息             Message = message.Message;         }          public TargetViewModel()         {             WeakReferenceMessenger.Default.Register(this);         }          private string message="Init";                      public string Message         {             get => message;             set => SetProperty(ref message, value);         }      }

方式三(请求消息)

1、创建消息

    public class MyTestMessage     {         public MyTestMessage(string msg)         {             Message = msg;         }          public string Message { get; }     }      public class MyRequestMessage : RequestMessage     {           }

2、发送请求消息(某界面)

MyTestMessage reply= WeakReferenceMessenger.Default.Send(); MessageBox.Show(reply.Message);

3、回复消息(其它界面)

WeakReferenceMessenger.Default.Register(this, (r, m) => {     //回复     m.Reply(new MyTestMessage("ReplyMsg")); });

相关内容

热门资讯

第二分钟指南!皮皮辅助软件下载... 第二分钟指南!皮皮辅助软件下载,樱花之盛辅助软件下载(辅助)其实真的是有神器(哔哩哔哩)1.樱花之盛...
透视积累!约局吧德州真的存在透... 透视积累!约局吧德州真的存在透视吗,花花生活圈脚本(辅助)都是是真的有技巧(哔哩哔哩)1、花花生活圈...
透视有挂!小唐家乐园辅助器,德... 透视有挂!小唐家乐园辅助器,德州透视竞技联盟(透视)开挂辅助插件(哔哩哔哩)1、起透看视 小唐家乐园...
八分钟技法!福建天天开心攻略,... 八分钟技法!福建天天开心攻略,蛮王大厅辅助(辅助)确实是真的神器(哔哩哔哩)1、福建天天开心攻略公共...
透视练习!pokerworld... 透视练习!pokerworld辅助器,晋中胡乐辅助工具(辅助)一直是有技巧(哔哩哔哩)1)晋中胡乐辅...
现有说明如下!越悦游戏字牌攻略... 现有说明如下!越悦游戏字牌攻略,德州局怎么透视(透视)开挂辅助器(哔哩哔哩)1)越悦游戏字牌攻略免费...
第1分钟学习!新九哥辅助app... 第1分钟学习!新九哥辅助app,财神13章辅助软件(辅助)一直真的是有安装(哔哩哔哩)1、进入游戏-...
透视烘培!智星菠萝有挂吗,蘑菇... 透视烘培!智星菠萝有挂吗,蘑菇云辅助脚本(辅助)切实有技巧(哔哩哔哩)蘑菇云辅助脚本破解侠是真的助透...
今天下午!指尖四川小程序辅助,... 今天下午!指尖四川小程序辅助,pokemmo手机版脚本免费(透视)开挂辅助工具(哔哩哔哩)1、指尖四...
第七分钟办法!中至抚州辅助软件... 第七分钟办法!中至抚州辅助软件,破解版财神脚本(辅助)真是真的是有脚本(哔哩哔哩)1、中至抚州辅助软...