diff --git a/test/DryIoc.IssuesTests/GHIssue576_Extension_methods_not_being_handled_correctly_in_MadeOf_service_returning_expression.cs b/test/DryIoc.IssuesTests/GHIssue576_Extension_methods_not_being_handled_correctly_in_MadeOf_service_returning_expression.cs index 914b3f9d..fcbde634 100644 --- a/test/DryIoc.IssuesTests/GHIssue576_Extension_methods_not_being_handled_correctly_in_MadeOf_service_returning_expression.cs +++ b/test/DryIoc.IssuesTests/GHIssue576_Extension_methods_not_being_handled_correctly_in_MadeOf_service_returning_expression.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using NUnit.Framework; namespace DryIoc.IssuesTests @@ -12,8 +13,9 @@ public int Run() Test_factory_extension_method_for_the_factory_with_the_service_key(); Test_factory_extension_method_GHIssue577(); + Test_factory_extension_method_GHIssue577_exclude_from_Validate_via_metadata(); - return 3; + return 4; } [Test] @@ -93,6 +95,47 @@ public void Test_factory_extension_method_GHIssue577() Assert.AreEqual(typeof(Foo).FullName, ((SerilogLogger)foo.Logger).TypeName); } + [Test] + public void Test_factory_extension_method_GHIssue577_exclude_from_Validate_via_metadata() + { + var container = new Container(); + + var loggerFactory = new SerilogLoggerFactory(); + + container.RegisterInstance(loggerFactory); + + container.Register( + Made.Of(_ => ServiceInfo.Of(), + f => f.CreateLogger(null)), + setup: Setup.With(condition: r => r.Parent.ImplementationType == null)); + + var excludeFromValidation = "exclude-from-validation"; + container.Register( + Made.Of(_ => ServiceInfo.Of(), + f => f.CreateLogger(Arg.Index(0)), + r => r.Parent.ImplementationType), + setup: Setup.With(condition: r => r.Parent.ImplementationType != null, + metadataOrFuncOfMetadata: excludeFromValidation)); + + container.Register(); + + var errors = container.Validate(reg => + { + var metadata = reg.Factory.Setup.Metadata; + return metadata == null + || metadata is IDictionary d && !d.ContainsKey(excludeFromValidation) + || !Equals(metadata, excludeFromValidation); + }); + + Assert.IsEmpty(errors); + + var log = container.Resolve(); + Assert.IsNull(((SerilogLogger)log).TypeName); + + var foo = container.Resolve(); + Assert.AreEqual(typeof(Foo).FullName, ((SerilogLogger)foo.Logger).TypeName); + } + public sealed class Foo { public readonly ILogger Logger; diff --git a/test/DryIoc.TestRunner/Program.cs b/test/DryIoc.TestRunner/Program.cs index b15cb369..fbfc582e 100644 --- a/test/DryIoc.TestRunner/Program.cs +++ b/test/DryIoc.TestRunner/Program.cs @@ -8,9 +8,9 @@ public class Program { public static void Main() { - RunAllTests(); + // RunAllTests(); - // new GHIssue576_Extension_methods_not_being_handled_correctly_in_MadeOf_service_returning_expression().Run(); + new GHIssue576_Extension_methods_not_being_handled_correctly_in_MadeOf_service_returning_expression().Run(); // new GHIssue116_ReOpened_DryIoc_Resolve_with_decorators_goes_wrong_for_parallel_execution().Run(); // new RequiredPropertiesTests().Run();