public void DoNotGenerateGetServicesForNamedServicesWhenNotNeeded() { // Given var input = CompilationBuilder.CreateAssemblyWithCode( @"namespace Demo.Domain { public interface IFoo { } }", @"namespace Demo.Domain { using CustomCode.CompileTimeInject.Annotations; [Export] public sealed class Foo : IFoo { } }"); var sourceGenerator = new IocContainerGenerator(); var runtime = CSharpGeneratorDriver.Create(sourceGenerator); // When runtime.RunGeneratorsAndUpdateCompilation( compilation: input, outputCompilation: out var output, diagnostics: out var diagnostics); // Then Assert.False(diagnostics.HasErrors()); Assert.False(output.ContainsTypeWithMethodSignature( "IocContainer", "public T? GetService<T>(string serviceId) where T : class")); }
public void GenerateIocContainerClass() { // Given var input = CompilationBuilder.CreateEmptyAssembly(); var sourceGenerator = new IocContainerGenerator(); var runtime = CSharpGeneratorDriver.Create(sourceGenerator); // When runtime.RunGeneratorsAndUpdateCompilation( compilation: input, outputCompilation: out var output, diagnostics: out var diagnostics); // Then Assert.False(diagnostics.HasErrors()); Assert.True(output.ContainsClass("IocContainer")); }
public void GenerateGetServicesForNamedServicesWithScopes() { // Given var input = CompilationBuilder.CreateAssemblyWithCode( @"namespace Demo.Domain { public interface IFoo { } }", @"namespace Demo.Domain { using CustomCode.CompileTimeInject.Annotations; [Export(Lifetime.Scoped, ServiceId = ""1"")] public sealed class Foo : IFoo { } }"); var sourceGenerator = new IocContainerGenerator(); var runtime = CSharpGeneratorDriver.Create(sourceGenerator); // When runtime.RunGeneratorsAndUpdateCompilation( compilation: input, outputCompilation: out var output, diagnostics: out var diagnostics); // Then Assert.False(diagnostics.HasErrors()); Assert.True(output.ContainsTypeWithMethodImplementation( "IocContainer", @"public T? GetService<T>(string serviceId) where T : class { var scope = GetActiveScope(); var service = scope.GetService<T>(serviceId); return service; }")); }