43 lines
1.1 KiB
C#
43 lines
1.1 KiB
C#
#if VCONTAINER_ECS_INTEGRATION
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Unity.Entities;
|
|
using VContainer.Internal;
|
|
|
|
namespace VContainer.Unity {
|
|
public sealed class SystemRegistrationBuilder : RegistrationBuilder {
|
|
readonly string worldName;
|
|
Type systemGroupType;
|
|
|
|
internal SystemRegistrationBuilder(Type implementationType, string worldName)
|
|
: base(implementationType, default) {
|
|
this.worldName = worldName;
|
|
InterfaceTypes = new List<Type> {
|
|
typeof(ComponentSystemBase),
|
|
implementationType
|
|
};
|
|
}
|
|
|
|
public override Registration Build() {
|
|
var injector = InjectorCache.GetOrBuild(ImplementationType);
|
|
|
|
var parameters = new object[] {
|
|
ImplementationType,
|
|
worldName,
|
|
systemGroupType,
|
|
injector,
|
|
Parameters
|
|
};
|
|
|
|
Type type = typeof(SystemInstanceProvider<>).MakeGenericType(ImplementationType);
|
|
var provider = (IInstanceProvider)Activator.CreateInstance(type, parameters);
|
|
return new Registration(ImplementationType, Lifetime, InterfaceTypes, provider);
|
|
}
|
|
|
|
public SystemRegistrationBuilder IntoGroup<T>() where T : ComponentSystemGroup {
|
|
systemGroupType = typeof(T);
|
|
return this;
|
|
}
|
|
}
|
|
}
|
|
#endif |