public static TypeRecipient Create <TRecipient>( TypeInspectorRegistry registry, Func <TRecipient> factoryMethod, string?name, Lifetime lifetime, CollisionStrategy collisionStrategy) { if (registry is null) { throw new ArgumentNullException(nameof(registry)); } if (factoryMethod is null) { throw new ArgumentNullException(nameof(factoryMethod)); } if (!lifetime.IsValid()) { throw new ArgumentException($"Invalid {nameof(lifetime)} value: {lifetime}"); } if (!collisionStrategy.IsValid()) { throw new ArgumentException($"Invalid {nameof(collisionStrategy)} value: {collisionStrategy}"); } var inspector = registry.For <TRecipient>(); IRecipientFactory factory = new RecipientFactory(() => factoryMethod() !); if (lifetime != Lifetime.Transient) { factory = new SingletonRecipientFactory(factory); } return(new TypeRecipient( typeof(TRecipient), new TypeRecipientDescriptor(inspector), new InstanceRecipientInvoker(inspector, factory, collisionStrategy), name, lifetime, collisionStrategy)); }