StrangeIoC的Signal代码实现(不涉及UI)

news/2024/5/19 0:13:46 标签: StrangeIoC, Signal

按照惯例,新建空节点,放上入口脚本TestRoot

  • 以下为Assets的目录
    在这里插入图片描述

现在从上到下,依次贴出代码

RequestCommand

using UnityEngine;
using strange.extensions.command.impl;
using strange.extensions.signal.api;
using System;

public class RequestCommand : Command
{
    [Inject]
    public IService service { get; set; }
    public override void Execute()
    {
        Retain();
        service.signal_succesd.AddListener(OnComplete);
        service.Request();
    }

    private void OnComplete(IBaseSignal arg1, object[] arg2)
    {
        throw new NotImplementedException();
    }

    void OnComplete()
    {
        service.signal_succesd.RemoveListener(OnComplete);
        Debug.Log("get data finish");

        Release();
    }

}

StartCommand

using UnityEngine;
using strange.extensions.command.impl;
using strange.extensions.context.api;

public class StartCommand : Command
{
    [Inject(ContextKeys.CONTEXT_VIEW)]
    public GameObject contextView { get; set; }
    public override void Execute()
    {
        GameObject test = new GameObject("test");
        test.AddComponent<TestView>();
        test.transform.SetParent(contextView.transform);
    }
}

IService

using strange.extensions.signal.api;

public interface IService
{
    IBaseSignal signal_succesd { get; set; }
    void Request();
}

TestService

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using strange.extensions.context.api;
using strange.extensions.signal.api;

public class TestService : IService
{
    [Inject(ContextKeys.CONTEXT_VIEW)]
    public GameObject contextView { get; set; }
    [Inject]
    public SuccessSignal signal_succesd { get; set; }

    IBaseSignal IService.signal_succesd
    {
        get
        {
            throw new System.NotImplementedException();
        }

        set
        {
            throw new System.NotImplementedException();
        }
    }

    public void Request()
    {
        contextView.GetComponent<MonoBehaviour>().StartCoroutine(Wait());
    }

    public void Request(string url)
    {
        throw new System.NotImplementedException();
    }

    /// <summary>
    /// 模拟网络请求延迟1秒
    /// </summary>
    /// <returns></returns>
    IEnumerator Wait()
    {
        yield return new WaitForSeconds(1);
        signal_succesd.Dispatch();
    }
}

Signal4_119">Signal文件夹4个脚本

using strange.extensions.signal.impl;

public class ClickSignal : Signal
{
}


using strange.extensions.signal.impl;

public class RequestSignal : Signal<string>
{
}


using strange.extensions.signal.impl;

public class StartSignal : Signal
{
}


using strange.extensions.signal.impl;

public class SuccessSignal : Signal
{
}

TestMediator

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using strange.extensions.mediation.impl;

public class TestMediator : Mediator
{
    [Inject]
    public TestView view { get; set; }

    [Inject]
    public RequestSignal signal_Request { get; set; }

    public override void OnRegister()
    {
        view.signal_Click.AddListener(OnClick);
    }
    public void OnClick()
    {
        signal_Request.Dispatch("cn.bing.com");
    }
}

TestView

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using strange.extensions.mediation.impl;

public class TestView : View
{
    public ClickSignal signal_Click = new ClickSignal();
    void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 40), "click"))
        {
            signal_Click.Dispatch();
        }
    }
}

TestContext

using UnityEngine;
using System.Collections;
using strange.extensions.context.impl;
using strange.extensions.context.api;
using strange.extensions.command.api;
using strange.extensions.command.impl;

public class TestContext : MVCSContext
{

    public TestContext(MonoBehaviour view)
        : base(view)
    {

    }


    public TestContext(MonoBehaviour view, bool flags)
        : base(view, flags)
    {

    }

    override public IContext Start()
    {
        base.Start();
        StartSignal startSignal = (StartSignal)injectionBinder.GetInstance<StartSignal>();
        startSignal.Dispatch();
        return this;
    }

    protected override void addCoreComponents()
    {
        base.addCoreComponents();
        injectionBinder.Unbind<ICommandBinder>();
        injectionBinder.Bind<ICommandBinder>().To<SignalCommandBinder>().ToSingleton();
    }

    protected override void mapBindings()
    {
        injectionBinder.Bind<SuccessSignal>().ToSingleton();
        injectionBinder.Bind<IService>().To<TestService>();

        mediationBinder.Bind<TestView>().To<TestMediator>();

        commandBinder.Bind<RequestSignal>().To<RequestCommand>();
        commandBinder.Bind<StartSignal>().To<StartCommand>().Once();
    }
}

TestRoot

using UnityEngine;
using System.Collections;
using strange.extensions.context.impl;

public class TestRoot : ContextView
{
    
    void Awake()
    {
        context = new TestContext(this);
        context.Start();
    }
}

http://www.niftyadmin.cn/n/1516035.html

相关文章

CSS3 背景图片水平+垂直居中

html5 <div classbg-center /> css3 .bg-center {background: url(../images/1.png) no-repeat center center;background-size: contain; }

app测试用mysql数据库_数据库基础开源学习教程: 安装配置数据库,使用Navicat for MySQL和手机APP 连接测试(如果上一节碰到问题可参考这一节)...

咱就安装上还有这个最终测试请参考上一节启动MySQL服务主要有以下两种方法&#xff1a;第一种&#xff1a;在搜索框中输入“services,msc” ,enter键确认之后找到MySQL服务&#xff0c;双击打开属性对话框&#xff0c;通过点击“启动”&#xff0c;“停止”来改变服务状态。第二…

MySQL和Oracle的防重插入和防重建表

一、MySQL 1、表结构 表 student 具备 列 id 和 name 2、防重建表&#xff08;DDL&#xff09; CREATE TABLE IF NOT EXISTS student ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ); 3、防重插入&#xff08;DML&#xff09; INSERT IGNORE INTO student ( id, name )…

zabbix利用插件监控mysql_zabbix监控之利用percona-zabbix监控mysql数据库

percona-zabbix插件下载地址&#xff1a;https://www.percona.com/downloads/注意&#xff1a;使用percona需要安装php和php-mysql安装&#xff1a;rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm安装完后注意两个目录&#xff1a;Scripts are installed to /var/lib/z…

mysql 二维数组下标_二维数组 A[m][n] 按行优先和按列优先的 下标地址转换公式...

设二维数组 A[m][n] 按行优先存储, 每个元素占 p 个字节&#xff0c;则 Loc(i, j) 的地址为(i * n m) * p, 第 i 行前面有 i 行&#xff0c; 每行有 n 个元素&#xff0c; 加上 第 i 行的的 j 个元素&#xff0c;所以地址 为 (i * n m) * p,1. 若 j 从下标 1 开始&#xff0c…

Python转exe方法与_MEI清除方法

一、如何Python转 exe 1、安装 pyinstaller pip insatll pyinstaller 2、使用 pyinstaller &#xff08;1&#xff09;打包成文件夹 pyinstaller -D xx.py &#xff08;2&#xff09;打包成文件 pyinstaller -F xx.py &#xff08;3&#xff09;打包时引入第三方库&…

mysql8 x protocol_mysql 安装了最新版本8.x版本后的报错: the server requested authentication method unknow...

一&#xff0c;在MySQL 8.0.11中&#xff0c;caching_sha2_password是默认的身份验证插件&#xff0c;而不是以往的mysql_native_password。有关此更改对服务器操作的影响以及服务器与客户端和连接器的兼容性的信息&#xff0c;请参阅caching_sha2_password作为首选的身份验证插…

Python实现的重复文件清理

一、情景描述 1、磁盘文件太多&#xff0c;又舍不得删&#xff0c;单纯想清理出重复文件&#xff0c;人工太费力 2、成品下载&#xff1a; 百度云&#xff1a;https://pan.baidu.com/s/1W3pHU-dGi_mrd8M140Vogg 提取码&#xff1a;ji0r 3、成品使用&#xff1a; &…