.NetCore dependency injection and optional params on assembly scanning
-
With autofac I'm to add a parameter to the constructor and even more, the parameter can be optional
//autofac
Builder
.RegisterAssemblyTypes(assemblies)
.Where(t => typeof(T).IsAssignableFrom(t))
.SingleInstance()
.AsSelf()
.WithParameter(new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(IMyService),
(pi, ctx) => ctx.ResolveOptional() ));Could you help do this with the default MS dependency container and Scrutor? What should I add here:
//MS Dependency Container
Builder
.Scan(s =>
s.FromAssemblies(assemblies)
.AddClasses(c => c.AssignableTo(typeof(T)))
.AsSelf()
.WithTransientLifetime() );Thank you in advance for help and answer
-
With autofac I'm to add a parameter to the constructor and even more, the parameter can be optional
//autofac
Builder
.RegisterAssemblyTypes(assemblies)
.Where(t => typeof(T).IsAssignableFrom(t))
.SingleInstance()
.AsSelf()
.WithParameter(new ResolvedParameter(
(pi, ctx) => pi.ParameterType == typeof(IMyService),
(pi, ctx) => ctx.ResolveOptional() ));Could you help do this with the default MS dependency container and Scrutor? What should I add here:
//MS Dependency Container
Builder
.Scan(s =>
s.FromAssemblies(assemblies)
.AddClasses(c => c.AssignableTo(typeof(T)))
.AsSelf()
.WithTransientLifetime() );Thank you in advance for help and answer
If the constructor parameter is optional, it should just work:
public class Foo
{
public IBar Bar { get; }
public IBaz Baz { get; }
public Foo(IBar bar = default, IBaz baz = default) (Bar, Baz) = (bar, baz);
}...
IServiceCollection services = new ServiceCollection();
services.AddTransient<IBaz, Baz>();
services.AddTransient<Foo>();IServiceProvider provider = services.BuildServiceProvider();
Foo foo = provider.GetRequiredService<Foo>();Debug.Assert(foo != null);
Debug.Assert(foo.Baz != null);
Debug.Assert(foo.Bar == null);It doesn't matter whether you register the services manually or use Scrutor.
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer