private static bool TryGetInjectionFunctionDeclaration(Type type, int injectionFunctionIndex, out string result) { var stringBuilder = new StringBuilder(); stringBuilder.Append(DoubleIndent) .Append("private static void ") .Append(GetInjectionFunctionName(injectionFunctionIndex)) .Append($"({nameof(MonoBehaviour)} component, {nameof(ResolutionFunction)} resolve)") .AppendLine(); stringBuilder.Append(DoubleIndent) .AppendLine("{"); stringBuilder.Append(TripleIndent) .AppendLine($"var obj = ({GetFullyQualifiedName(type)}) component;"); foreach (var constructMethod in Injection.GetConstructMethods(type)) { if (!Injection.TryGetInjectableParameters(constructMethod, out var parameters)) { continue; } stringBuilder.Append(TripleIndent) .Append("obj.") .Append(Injection.Constructor) .Append("("); for (var parameterIndex = 0; parameterIndex < parameters.Count; parameterIndex++) { if (parameterIndex > 0) { stringBuilder.Append(", "); } var parameter = parameters[parameterIndex]; AppendResolveExpression(parameter.ParameterType, stringBuilder); } stringBuilder.AppendLine(");"); } stringBuilder.Append(DoubleIndent) .AppendLine("}"); result = stringBuilder.ToString(); return(true); }
private static bool IsInjectable(GameObject gameObject) { var components = gameObject.GetComponents <MonoBehaviour>(); foreach (var component in components) { if (component == null) { continue; } var type = component.GetType(); var constructMethods = Injection.GetConstructMethods(type); if (constructMethods.Count > 0) { return(true); } } return(false); }