48 lines
1.5 KiB
C#
48 lines
1.5 KiB
C#
#if VCONTAINER_ECS_INTEGRATION && UNITY_2022_2_OR_NEWER
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Unity.Entities;
|
|
using VContainer.Internal;
|
|
|
|
namespace VContainer.Unity
|
|
{
|
|
public sealed class UnmanagedSystemRegistrationBuilder : RegistrationBuilder
|
|
{
|
|
readonly string worldName;
|
|
Type systemGroupType;
|
|
|
|
internal UnmanagedSystemRegistrationBuilder(Type implementationType, string worldName)
|
|
: base(implementationType, default)
|
|
{
|
|
this.worldName = worldName;
|
|
Type refType = typeof(UnmanagedSystemReference<>);
|
|
Type[] typeArgs = { implementationType };
|
|
Type refImplType = refType.MakeGenericType(typeArgs);
|
|
InterfaceTypes = new List<Type>
|
|
{
|
|
typeof(UnmanagedSystemReference),
|
|
refImplType
|
|
};
|
|
}
|
|
|
|
public override Registration Build()
|
|
{
|
|
IInjector injector = InjectorCache.GetOrBuild(ImplementationType);
|
|
var provider = new UnmanagedSystemInstanceProvider(
|
|
ImplementationType,
|
|
worldName,
|
|
systemGroupType,
|
|
injector,
|
|
Parameters);
|
|
return new Registration(ImplementationType, Lifetime, InterfaceTypes, provider);
|
|
}
|
|
|
|
public UnmanagedSystemRegistrationBuilder IntoGroup<T>() where T : ComponentSystemGroup
|
|
{
|
|
systemGroupType = typeof(T);
|
|
return this;
|
|
}
|
|
}
|
|
}
|
|
#endif
|