基于TinaX创建一个扩展库
结构

使用
var core = XCore.New()
.UseVFS().UseI18N().UseUIKit().UseLuaRuntime()
.UseSDK(new SDKDelegate())
.UseDownloader()
.UseNet()
.OnServicesStartException((service, error) =>
{
});
await core.RunAsync();
SDKConst.cs 用于定义一些常量
namespace TinaX.SDK.Const
{
public static class SDKConst
{
public const string ServiceName = "TinaX.SDK";
public const string GameObjectName = "SDKManager";
}
}
ISDK.cs : 用于定义对外的一些接口
namespace TinaX.SDK
{
public interface ISDK
{
void DoInit(string args);
void DoLogin(string args);
void DoLogout(string args);
void DoOrder(string args);
void DoPay(string args);
void DoShare(string args);
void DoTracking(string args);
void DoExitGame(string args);
void DoAny(string args);
}
}
ISDKInternal.cs : 用于定义内部使用的一些接口
using System.Threading.Tasks;
namespace TinaX.SDK.Internal
{
public interface ISDKInternal
{
Task<XException> Start();
void SetDelegate(ISDKDelegate sdkDelegate);
void OnNativeCallback(string args);
}
}
SDKExtend.cs : 基于框架扩展接口
using TinaX.SDK;
namespace TinaX.Services
{
public static class SDKExtend
{
public static IXCore UseSDK(this IXCore core,ISDKDelegate sdkDelegate)
{
core.RegisterServiceProvider(new SDKProvider(sdkDelegate));
return core;
}
}
}
SDKFacade.cs 服务门面
namespace TinaX.SDK
{
public class SDK : CatLib.Facade<ISDK>
{
public static ISDK Instance => SDK.That;
public static ISDK I => SDK.That;
}
}
SDKProvider.cs 服务提供者
using System.Threading.Tasks;
using TinaX.SDK.Const;
using TinaX.SDK.Internal;
using TinaX.Services;
namespace TinaX.SDK
{
[XServiceProviderOrder(100)]
public class SDKProvider : IXServiceProvider
{
public string ServiceName => SDKConst.ServiceName;
private ISDKDelegate _sdkDelegate;
public SDKProvider(ISDKDelegate sdkDelegate)
{
this._sdkDelegate = sdkDelegate;
}
public Task<XException> OnInit(IXCore core)
=> Task.FromResult<XException>(null);
public void OnServiceRegister(IXCore core)
{
core.Services.Singleton<ISDK, SDKManager>()
.SetAlias<ISDKInternal>();
}
public Task<XException> OnStart(IXCore core)
{
core.Services.Get<ISDKInternal>().SetDelegate(_sdkDelegate);
return core.Services.Get<ISDKInternal>().Start();
}
public void OnQuit() { }
public Task OnRestart() => Task.CompletedTask;
}
}
SDKManager.cs 服务接口实现
using System.Threading.Tasks;
using UnityEngine;
using TinaX.SDK.Const;
namespace TinaX.SDK.Internal
{
public class SDKManager : ISDK, ISDKInternal
{
[Inject]
public IXCore Core { get; set; }
private ISDKDelegate _sdkDelegate;
public void DoAny(string args)
{
_sdkDelegate?.DoAny(args);
}
public void DoExitGame(string args)
{
_sdkDelegate?.DoExitGame(args);
}
public void DoInit(string args)
{
_sdkDelegate?.DoInit(args);
}
public void DoLogin(string args)
{
_sdkDelegate?.DoLogin(args);
}
public void DoLogout(string args)
{
_sdkDelegate?.DoLogout(args);
}
public void DoOrder(string args)
{
_sdkDelegate?.DoOrder(args);
}
public void DoPay(string args)
{
_sdkDelegate?.DoPay(args);
}
public void DoShare(string args)
{
_sdkDelegate?.DoShare(args);
}
public void DoTracking(string args)
{
_sdkDelegate?.DoTracking(args);
}
public void OnNativeCallback(string args)
{
_sdkDelegate?.OnNativeCallback(args);
}
public void SetDelegate(ISDKDelegate sdkDelegate)
{
this._sdkDelegate = sdkDelegate;
}
public Task<XException> Start()
{
var parent = GameObject.Find("TinaX");
var gameObject = new GameObject(SDKConst.GameObjectName);
if (parent != null)
{
gameObject.SetParent(parent);
}
else
{
gameObject.DontDestroy();
}
var behaviour = gameObject.AddComponent<SDKBehaviour>();
Core.InjectObject(behaviour);
Core.CreateInstance(typeof(SDKBehaviour));
Core.CreateInstanceAndInject(typeof(SDKBehaviour));
_sdkDelegate?.OnReady();
return Task.FromResult<XException>(null);
}
}
}