protected DeputyBase()

in packages/@jsii/dotnet-runtime/src/Amazon.JSII.Runtime/Deputy/DeputyBase.cs [41:111]


        protected DeputyBase(DeputyProps? props = null)
        {
            var type = GetType();
            JsiiTypeAttributeBase.Load(type.Assembly);

            // If this is a native object, it won't have any jsii metadata.
            var attribute = ReflectionUtils.GetClassAttribute(type);
            var fullyQualifiedName = attribute?.FullyQualifiedName ?? "Object";
            var parameters = attribute?.Parameters ?? Array.Empty<Parameter>();

            var serviceProvider = ServiceContainer.ServiceProvider;
            var client = serviceProvider.GetRequiredService<IClient>();
            var response = client.Create(
                fullyQualifiedName,
                ConvertArguments(parameters, props?.Arguments ?? Array.Empty<object>()),
                GetOverrides(),
                GetInterfaces()
            );

            Reference = new ByRefValue((response["$jsii.byref"] as string)!);
            var referenceMap = serviceProvider.GetRequiredService<IReferenceMap>();
            referenceMap.AddNativeReference(Reference, this, true);

            Override[] GetOverrides()
            {
                return GetMethodOverrides().Concat(GetPropertyOverrides()).ToArray();
            }

            IEnumerable<Override> GetMethodOverrides()
            {
                var typeMethods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
                    .Where(method => !method.DeclaringType?.Equals(typeof(DeputyBase)) ?? false)
                    .Where(method => !method.DeclaringType?.Equals(typeof(object)) ?? false);
                foreach (var method in typeMethods)
                {
                    var inheritedAttribute = method.GetAttribute<JsiiMethodAttribute>();
                    var uninheritedAttribute = method.GetAttribute<JsiiMethodAttribute>(false);

                    if (inheritedAttribute != null && uninheritedAttribute == null)
                    {
                        yield return new Override(method: (inheritedAttribute ?? uninheritedAttribute)!.Name);
                    }
                }
            }

            IEnumerable<Override> GetPropertyOverrides()
            {
                var typeProperties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
                        .Where(prop => !prop.DeclaringType?.Equals(typeof(DeputyBase)) ?? false)
                        .Where(prop => !prop.DeclaringType?.Equals(typeof(object)) ?? false);
                foreach (var property in typeProperties)
                {
                    var inheritedAttribute = property.GetAttribute<JsiiPropertyAttribute>();
                    var uninheritedAttribute = property.GetAttribute<JsiiPropertyAttribute>(false);

                    if (inheritedAttribute != null && uninheritedAttribute == null)
                    {
                        yield return new Override(property: (inheritedAttribute ?? uninheritedAttribute)!.Name);
                    }
                }
            }

            string[] GetInterfaces()
            {
                return type.GetInterfaces()
                    .Select(iface => iface.GetCustomAttribute<JsiiInterfaceAttribute>())
                    .Where(jsiiIface => jsiiIface != null)
                    .Select(jsiiIface => jsiiIface!.FullyQualifiedName)
                    .ToArray();
            }
        }