按照惯例,新建空节点,放上入口脚本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();
}
}
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();
}
}