From 1117250fc0ecdc10a6477e95f484735ffa4ce194 Mon Sep 17 00:00:00 2001 From: Dan Siegel Date: Sun, 5 Mar 2023 13:26:30 -0600 Subject: [PATCH 1/2] fix: missing Reuse for factory delegates --- .../Prism.DryIoc.Shared/DryIocContainerExtension.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Containers/Prism.DryIoc.Shared/DryIocContainerExtension.cs b/src/Containers/Prism.DryIoc.Shared/DryIocContainerExtension.cs index 99237b4e30..942673d4df 100644 --- a/src/Containers/Prism.DryIoc.Shared/DryIocContainerExtension.cs +++ b/src/Containers/Prism.DryIoc.Shared/DryIocContainerExtension.cs @@ -235,7 +235,7 @@ public IContainerRegistry Register(Type from, Type to, string name) /// The instance public IContainerRegistry Register(Type type, Func factoryMethod) { - Instance.RegisterDelegate(type, r => factoryMethod()); + Instance.RegisterDelegate(type, r => factoryMethod(), Reuse.Transient); return this; } @@ -247,7 +247,7 @@ public IContainerRegistry Register(Type type, Func factoryMethod) /// The instance public IContainerRegistry Register(Type type, Func factoryMethod) { - Instance.RegisterDelegate(type, factoryMethod); + Instance.RegisterDelegate(type, factoryMethod, Reuse.Transient); return this; } From d3ee5bfa00112cd39cd81f3f910bb6d11207ba82 Mon Sep 17 00:00:00 2001 From: Dan Siegel Date: Sun, 5 Mar 2023 13:35:54 -0600 Subject: [PATCH 2/2] chore: adding factory tests --- .../Tests/ContainerFixture.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/Containers/Prism.Container.Shared/Tests/ContainerFixture.cs b/tests/Containers/Prism.Container.Shared/Tests/ContainerFixture.cs index 526b367e02..ab3a089fc9 100644 --- a/tests/Containers/Prism.Container.Shared/Tests/ContainerFixture.cs +++ b/tests/Containers/Prism.Container.Shared/Tests/ContainerFixture.cs @@ -438,6 +438,24 @@ public void LocatesImplementationType() Assert.Equal(typeof(ServiceA), type); } + [Fact] + public void RegisterTransientDelegateReturnsNewInstanceEachTime() + { + var container = Setup.CreateContainer(); + Setup.Registry.Register(() => new ServiceA()); + + Assert.NotSame(container.Resolve(), container.Resolve()); + } + + [Fact] + public void RegisterTransientDelegateWithContainerReturnsNewInstanceEachTime() + { + var container = Setup.CreateContainer(); + Setup.Registry.Register(x => new ServiceA()); + + Assert.NotSame(container.Resolve(), container.Resolve()); + } + private static IServiceA CreateService() => new ServiceA { SomeProperty = "Created through a factory" };