コード例 #1
0
        public static Cat Register(this Cat cat, Type from, Type to, Lifetime lifetime)
        {
            Func <Cat, Type[], object> factory = (_, arguments) => Create(_, to, arguments);

            cat.Register(new ServiceRegistry(from, lifetime, factory));
            return(cat);
        }
コード例 #2
0
        public static Cat Register <TService>(this Cat cat, TService instance)
        {
            Func <Cat, Type[], object> factory = (_, arguments) => instance;

            cat.Register(new ServiceRegistry(typeof(TService), Lifetime.Root, factory));
            return(cat);
        }
コード例 #3
0
        public static Cat Register <TFrom, TTo>(this Cat cat, Lifetime lifetime)
            where TTo : TFrom
        {
            Func <Cat, Type[], object> factory = (_, arguments) => Create(_, typeof(TTo), arguments);

            cat.Register(new ServiceRegistry(typeof(TFrom), lifetime, factory));
            return(cat);
        }
コード例 #4
0
        public static Cat Register(this Cat cat, Assembly assembly)
        {
            var typedAttributes = from type in assembly.GetExportedTypes()
                                  let attribute = type.GetCustomAttribute <MapToAttribute>()
                                                  where attribute != null
                                                  select new { ServiceType = type, Attribute = attribute };

            foreach (var typedAttribute in typedAttributes)
            {
                cat.Register(typedAttribute.Attribute.ServiceType, typedAttribute.ServiceType, typedAttribute.Attribute.Lifetime);
            }
            return(cat);
        }
コード例 #5
0
        public CatBuilder CreateBuilder(IServiceCollection services)
        {
            var cat = new Cat();

            foreach (var service in services)
            {
                if (service.ImplementationFactory != null)
                {
                    cat.Register(service.ServiceType, provider => service.ImplementationFactory(provider), service.Lifetime.AsCatLifetime());
                }
                else if (service.ImplementationInstance != null)
                {
                    cat.Register(service.ServiceType, service.ImplementationInstance);
                }
                else
                {
                    cat.Register(service.ServiceType, service.ImplementationType,
                                 service.Lifetime.AsCatLifetime());
                }
            }
            return(new CatBuilder(cat));
        }
コード例 #6
0
 public static Cat Register <TService>(this Cat cat,
                                       Func <Cat, TService> factory, Lifetime lifetime)
 {
     cat.Register(new ServiceRegistry(typeof(TService), lifetime, (_, arguments) => factory(_)));
     return(cat);
 }
コード例 #7
0
 public static Cat Register(this Cat cat, Type serviceType,
                            Func <Cat, object> factory, Lifetime lifetime)
 {
     cat.Register(new ServiceRegistry(serviceType, lifetime, (_, arguments) => factory(_)));
     return(cat);
 }
コード例 #8
0
 public static Cat Register <TFrom, TTo>(this Cat cat, Lifetime lifetime) where TTo : TFrom
 => cat.Register(typeof(TFrom), typeof(TTo), lifetime);
コード例 #9
0
ファイル: CatBuilder.cs プロジェクト: hyperpc/AspNetCoreFxAdv
 public CatBuilder Register(Assembly assembly)
 {
     _cat.Register(assembly);
     return(this);
 }
コード例 #10
0
ファイル: CatBuilder.cs プロジェクト: hyperpc/AspNetCoreFxAdv
 public CatBuilder(Cat cat)
 {
     _cat = cat;
     _cat.Register <IServiceScopeFactory>(c => new ServiceScopeFactory(c.CreateChild()), Lifetime.Transient);
 }