diff --git a/Directory.Packages.props b/Directory.Packages.props
index 7a4deb521..870c8c3a1 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -8,7 +8,7 @@
-
+
@@ -42,7 +42,7 @@
-
+
@@ -59,7 +59,7 @@
-
+
@@ -75,7 +75,7 @@
-
+
@@ -91,7 +91,7 @@
-
+
@@ -107,7 +107,7 @@
-
+
@@ -122,7 +122,7 @@
-
+
diff --git a/src/bunit.core/Rendering/BunitComponentActivator.cs b/src/bunit.core/Rendering/BunitComponentActivator.cs
index e7afdd5c8..3d1e9c1de 100644
--- a/src/bunit.core/Rendering/BunitComponentActivator.cs
+++ b/src/bunit.core/Rendering/BunitComponentActivator.cs
@@ -7,10 +7,13 @@ internal class BunitComponentActivator : IComponentActivator
private readonly ComponentFactoryCollection factories;
private readonly IComponentActivator componentActivator;
- public BunitComponentActivator(ComponentFactoryCollection factories, IComponentActivator? externalComponentActivator)
+ public BunitComponentActivator(
+ IServiceProvider serviceProvider,
+ ComponentFactoryCollection factories,
+ IComponentActivator? externalComponentActivator)
{
this.factories = factories ?? throw new ArgumentNullException(nameof(factories));
- this.componentActivator = externalComponentActivator ?? DefaultComponentActivator.Instance;
+ this.componentActivator = externalComponentActivator ?? new DefaultComponentActivator(serviceProvider);
}
public IComponent CreateInstance([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type componentType)
@@ -43,12 +46,17 @@ public IComponent CreateInstance([DynamicallyAccessedMembers(DynamicallyAccessed
private sealed class DefaultComponentActivator : IComponentActivator
{
- public static IComponentActivator Instance { get; } = new DefaultComponentActivator();
+ private readonly IServiceProvider serviceProvider;
+
+ public DefaultComponentActivator(IServiceProvider serviceProvider)
+ {
+ this.serviceProvider = serviceProvider;
+ }
///
public IComponent CreateInstance([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type componentType)
- {
- return (IComponent)Activator.CreateInstance(componentType)!;
+ {
+ return (IComponent)ActivatorUtilities.CreateInstance(serviceProvider, componentType);
}
}
}
diff --git a/src/bunit.core/Rendering/TestRenderer.cs b/src/bunit.core/Rendering/TestRenderer.cs
index bf7449b4e..61d4deecf 100644
--- a/src/bunit.core/Rendering/TestRenderer.cs
+++ b/src/bunit.core/Rendering/TestRenderer.cs
@@ -79,7 +79,7 @@ public TestRenderer(IRenderedComponentActivator renderedComponentActivator, Test
/// Initializes a new instance of the class.
///
public TestRenderer(IRenderedComponentActivator renderedComponentActivator, TestServiceProvider services, ILoggerFactory loggerFactory)
- : base(services, loggerFactory, new BunitComponentActivator(services.GetRequiredService(), null))
+ : base(services, loggerFactory, new BunitComponentActivator(services, services.GetRequiredService(), null))
{
logger = loggerFactory.CreateLogger();
this.activator = renderedComponentActivator;
@@ -89,7 +89,7 @@ public TestRenderer(IRenderedComponentActivator renderedComponentActivator, Test
/// Initializes a new instance of the class.
///
public TestRenderer(IRenderedComponentActivator renderedComponentActivator, TestServiceProvider services, ILoggerFactory loggerFactory, IComponentActivator componentActivator)
- : base(services, loggerFactory, new BunitComponentActivator(services.GetRequiredService(), componentActivator))
+ : base(services, loggerFactory, new BunitComponentActivator(services, services.GetRequiredService(), componentActivator))
{
logger = loggerFactory.CreateLogger();
this.activator = renderedComponentActivator;
diff --git a/tests/bunit.testassets/SampleComponents/ConstructorInjectionComponent.cs b/tests/bunit.testassets/SampleComponents/ConstructorInjectionComponent.cs
new file mode 100644
index 000000000..7b99ac4b1
--- /dev/null
+++ b/tests/bunit.testassets/SampleComponents/ConstructorInjectionComponent.cs
@@ -0,0 +1,13 @@
+using Microsoft.JSInterop;
+
+namespace Bunit.TestAssets.SampleComponents;
+
+public class ConstructorInjectionComponent : ComponentBase
+{
+ public IJSRuntime JSRuntime { get; }
+
+ public ConstructorInjectionComponent(IJSRuntime jsRuntime)
+ {
+ JSRuntime = jsRuntime;
+ }
+}
diff --git a/tests/bunit.web.tests/Rendering/RenderedComponentTest.cs b/tests/bunit.web.tests/Rendering/RenderedComponentTest.cs
index a4dd4a0d9..412779aad 100644
--- a/tests/bunit.web.tests/Rendering/RenderedComponentTest.cs
+++ b/tests/bunit.web.tests/Rendering/RenderedComponentTest.cs
@@ -57,4 +57,14 @@ public void Test020()
Should.Throw(() => target.Instance);
}
+ #if NET9_0_OR_GREATER
+
+ [Fact(DisplayName = "Component with constructor dependencies is resolved when rendered")]
+ public void Test021()
+ {
+ var cut = RenderComponent();
+
+ cut.Instance.JSRuntime.ShouldNotBeNull();
+ }
+ #endif
}