コード例 #1
0
        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));
        }