Hello there,
I am exploring the use of this library, but am having some difficulty with decorations during the configuration of a host builder.
Here is the xUnit test I am developing:
[Fact]
async Task Grace()
{
var host = new HostBuilder().UseGrace()
.ConfigureServices(x => x.AddSingleton("Hello World!"))
.ConfigureContainer<IInjectionScope>(x => x.Configure(y => y.ExportDecorator<string>(z => $"Decorated: {z}")))
.Build();
await host.StartAsync();
host.Services.GetRequiredService<string>().Should().Be("Decorated: Hello World!");
}
When using the above, I get a rather lengthy error:
Grace.DependencyInjection.Exceptions.RecursiveLocateException : Recursive object graph detected
1 Importing System.String
2 Importing System.String
3 Importing System.String
4 Importing System.String
5 Importing System.String
6 Importing System.String
7 Importing System.String
8 Importing System.String
9 Importing System.String
10 Importing System.String
11 Importing System.String
12 Importing System.String
13 Importing System.String
14 Importing System.String
15 Importing System.String
16 Importing System.String
17 Importing System.String
18 Importing System.String
19 Importing System.String
20 Importing System.String
Dropped 60 entries
81 Importing System.String
82 Importing System.String
83 Importing System.String
84 Importing System.String
85 Importing System.String
86 Importing System.String
87 Importing System.String
88 Importing System.String
89 Importing System.String
90 Importing System.String
91 Importing System.String
92 Importing System.String
93 Importing System.String
94 Importing System.String
95 Importing System.String
96 Importing System.String
97 Importing System.String
98 Importing System.String
99 Importing System.String
100 Importing System.String
at Grace.DependencyInjection.Impl.Expressions.ActivationExpressionRequest.NewRequest(Type activationType, IActivationStrategy requestingStrategy, Type injectedType, RequestType requestType, Object info, Boolean maintainPaths, Boolean carryData)
at Grace.DependencyInjection.Impl.CompiledStrategies.CompiledInitializationDecoratorStrategy`1.InternalGetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request)
at Grace.DependencyInjection.Impl.CompiledStrategies.CompiledInitializationDecoratorStrategy`1.GetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle)
at Grace.DependencyInjection.Impl.Expressions.DecoratorActivationPathNode.GetActivationExpression(IInjectionScope scope, IActivationExpressionRequest request)
at Grace.DependencyInjection.Impl.Expressions.ActivationExpressionBuilder.CreateDecoratedActivationStrategy(IInjectionScope scope, IActivationExpressionRequest request, ICompiledExportStrategy strategy, List`1 decorators)
at Grace.DependencyInjection.Impl.Expressions.ActivationExpressionBuilder.DecorateExportStrategy(IInjectionScope scope, IActivationExpressionRequest request, ICompiledExportStrategy strategy)
at Grace.DependencyInjection.Impl.InstanceStrategies.BaseInstanceExportStrategy.GetActivationExpression(IInjectionScope scope, IActivationExpressionRequest request)
at Grace.DependencyInjection.Impl.Expressions.ActivationExpressionBuilder.ActivationExpressionForStrategy(IInjectionScope scope, IActivationExpressionRequest request, ICompiledExportStrategy strategy)
at Grace.DependencyInjection.Impl.Expressions.ActivationExpressionBuilder.GetExpressionFromStrategyCollection(IInjectionScope scope, IActivationExpressionRequest request)
at Grace.DependencyInjection.Impl.Expressions.ActivationExpressionBuilder.GetActivationExpressionFromStrategies(IInjectionScope scope, IActivationExpressionRequest request)
at Grace.DependencyInjection.Impl.Expressions.ActivationExpressionBuilder.GetActivationExpression(IInjectionScope scope, IActivationExpressionRequest request)
at Grace.DependencyInjection.Impl.CompiledStrategies.CompiledInitializationDecoratorStrategy`1.InternalGetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request)
at
... much repeat. 😆
My intent here is to utilize the "built-in" Microsoft.DependencyInjection.Abstractions (AddSingleton, AddTransient, AddScoped, etc) and then use the ConfigureContainer for Grace-specific functionality such as decoration.
FWIW, this approach worked fine when using LightInject, but because it appears that it does some funny business with Func<,> delegates that cannot be turned off, it has forced me to consider alternatives.
Is there a very obvious method call and/or configuration I am overlooking, perhaps?
Thank you for any assistance you can provide and for your efforts into this library. 👍
Hello there,
I am exploring the use of this library, but am having some difficulty with decorations during the configuration of a host builder.
Here is the xUnit test I am developing:
When using the above, I get a rather lengthy error:
... much repeat. 😆
My intent here is to utilize the "built-in"
Microsoft.DependencyInjection.Abstractions(AddSingleton,AddTransient,AddScoped, etc) and then use theConfigureContainerfor Grace-specific functionality such as decoration.FWIW, this approach worked fine when using LightInject, but because it appears that it does some funny business with
Func<,>delegates that cannot be turned off, it has forced me to consider alternatives.Is there a very obvious method call and/or configuration I am overlooking, perhaps?
Thank you for any assistance you can provide and for your efforts into this library. 👍