upm add package dev.upm-packages.cafu-coreNote: upm command is provided by this repository.
You can also edit Packages/manifest.json directly.
This package provides below interfaces.
IInitializeNotifiableIAsyncInitializeNotifiableIFinalizeNotifiableIAsyncFinalizeNotifiable
Call them each at the appropriate time.
using System;
using System.Collections.Generic;
using System.Linq;
using UniRx.Async;
using Zenject;
using CAFU.Core;
class Foo : IInitializable, IDisposable
{
[Inject] private IEnumerable<IInitializeNotifiable> InitializeNotifiables { get; }
[Inject] private IEnumerable<IAsyncInitializeNotifiable> AsyncInitializeNotifiables { get; }
[Inject] private IEnumerable<IFinalizeNotifiable> FinalizeNotifiables { get; }
[Inject] private IEnumerable<IAsyncFinalizeNotifiable> AsyncFinalizeNotifiables { get; }
void IInitializable.Initialize()
{
// Invoke synchronous
if (InitializeNotifiables != default && InitializeNotifiables.Any())
{
foreach (var initializeNotifiable in InitializeNotifiables)
{
initializeNotifiable.Notify();
}
}
// Invoke asynchronous (Recommend strongly to manage CancellationToken)
if (AsyncInitializeNotifiables != default && AsyncInitializeNotifiables.Any())
{
foreach (var asyncInitializeNotifiable in AsyncInitializeNotifiables)
{
asyncInitializeNotifiable.NotifyAsync().Forget(UnityEngine.Debug.LogException);
}
}
}
void IDisposable.Dispose()
{
// Invoke synchronous
if (FinalizeNotifiables != default && FinalizeNotifiables.Any())
{
foreach (var finalizeNotifiable in FinalizeNotifiables)
{
finalizeNotifiable.Notify();
}
}
// Invoke asynchronous (Recommend strongly to manage CancellationToken)
if (AsyncFinalizeNotifiables != default && AsyncFinalizeNotifiables.Any())
{
foreach (var asyncFinalizeNotifiable in AsyncFinalizeNotifiables)
{
asyncFinalizeNotifiable.NotifyAsync().Forget(UnityEngine.Debug.LogException);
}
}
}
}This package provides below extension methods.
IEnumerable<IInitializeNotifiable>.NotifyAll()IEnumerable<IAsyncInitializeNotifiable>.NotifyAsyncAll()IEnumerable<IFinalizeNotifiable>.NotifyAll()IEnumerable<IAsyncFinalizeNotifiable>.NotifyAsyncAll()
These methods internally check the NULL of IEnumerable and so on, so the caller doesn't have to do it.
using System;
using System.Collections.Generic;
using UniRx.Async;
using Zenject;
using CAFU.Core;
class Foo : IInitializable, IDisposable
{
[Inject] private IEnumerable<IInitializeNotifiable> InitializeNotifiables { get; }
[Inject] private IEnumerable<IAsyncInitializeNotifiable> AsyncInitializeNotifiables { get; }
[Inject] private IEnumerable<IFinalizeNotifiable> FinalizeNotifiables { get; }
[Inject] private IEnumerable<IAsyncFinalizeNotifiable> AsyncFinalizeNotifiables { get; }
void IInitializable.Initialize()
{
// Invoke synchronous
InitializeNotifiables.NotifyAll();
// Invoke asynchronous (Recommend strongly to manage CancellationToken)
AsyncInitializeNotifiables.NotifyAsyncAll().Forget(UnityEngine.Debug.LogException);
}
void IDisposable.Dispose()
{
// Invoke synchronous
FinalizeNotifiables.NotifyAll();
// Invoke asynchronous (Recommend strongly to manage CancellationToken)
AsyncFinalizeNotifiables.NotifyAsyncAll().Forget(UnityEngine.Debug.LogException);
}
}This package provides base class for Controller layer of CAFU: Clean Architecture For Unity.
Since it often triggers the initialization of the Controller as the starting point for processing, we provide a Base Class.
This is the base class for implicitly executing the Initialize/Finalize operations in the Controller layer, such as the sample code above.
using CAFU.Core
class Foo : ControllerBase
{
// Invoke methods automatically on initialize/finalize if interfaces are bounds
}
{ "dependencies": { // (snip) "dev.upm-packages.cafu-core": "[latest version]", // (snip) }, "scopedRegistries": [ { "name": "Unofficial Unity Package Manager Registry", "url": "https://upm-packages.dev", "scopes": [ "dev.upm-packages" ] } ] }