示例#1
0
        protected override void Generate(
            CodeWriter writer,
            DependencyInjectionDescriptor descriptor,
            out string fileName,
            out string?path)
        {
            fileName = CreateServiceCollectionExtensions(descriptor.Name);
            path     = DependencyInjection;

            ClassBuilder factory = ClassBuilder
                                   .New(fileName)
                                   .SetStatic()
                                   .SetAccessModifier(AccessModifier.Public);

            MethodBuilder addClientMethod = factory
                                            .AddMethod($"Add{descriptor.Name}")
                                            .SetPublic()
                                            .SetStatic()
                                            .SetReturnType(
                TypeNames.IClientBuilder.WithGeneric(descriptor.StoreAccessor.RuntimeType))
                                            .AddParameter(
                _services,
                x => x.SetThis().SetType(TypeNames.IServiceCollection))
                                            .AddParameter(
                _strategy,
                x => x.SetType(TypeNames.ExecutionStrategy)
                .SetDefault(TypeNames.ExecutionStrategy + "." + "NetworkOnly"))
                                            .AddCode(GenerateMethodBody(descriptor));

            if (descriptor.TransportProfiles.Count > 1)
            {
                addClientMethod
                .AddParameter(_profile)
                .SetType(CreateProfileEnumReference(descriptor))
                .SetDefault(CreateProfileEnumReference(descriptor) + "." +
                            descriptor.TransportProfiles[0].Name);
            }

            foreach (var profile in descriptor.TransportProfiles)
            {
                GenerateClientForProfile(factory, descriptor, profile);
            }


            factory.AddClass(_clientServiceProvider);

            CodeFileBuilder
            .New()
            .SetNamespace(TypeNames.DependencyInjectionNamespace)
            .AddType(factory)
            .Build(writer);
        }
示例#2
0
 public static ClassBuilder Add(string name) => ClassBuilder.AddClass(name);