예제 #1
0
        public void Activator()
        {
            var provider = _dependencies
                           .AddSingleton <ISession, Session>()
                           .BuildProvider();

            var first  = provider.GetService <ISession>();
            var second = provider.GetService <ISession>();

            Assert.Same(first, second);
        }
예제 #2
0
        public void Throw_Not_Generic_Implementation()
        {
            var builder = new DependencyCollection();

            Assert.Throws <InvalidOperationException>(() =>
                                                      builder.AddSingleton(typeof(IRepository <>), typeof(FooRepository)));
        }
예제 #3
0
 public static DependencyCollection AddPool <T>(this DependencyCollection dependencies,
                                                Func <IServiceProvider, T> builder, int capacity = 10)
     where T : class
 {
     dependencies.AddSingleton <IPool <T> >(provider => new Pool <T>(capacity, () => builder(provider)));
     return(dependencies);
 }
예제 #4
0
        public void Destroy()
        {
            var provider = _dependencies
                           .AddSingleton <IMapper <Boo>, CompiledMapper <Boo> >()
                           .AddSingleton <IBooRepository>(ctx => new BooRepository(ctx.GetService <IConfiguration>(), ctx.GetService <ISession>()))
                           .AddSingleton <BooService>()
                           .BuildProvider();

            var repository = (BooRepository)provider.GetService <IBooRepository>();
            var service    = provider.GetService <BooService>();

            provider.Dispose();

            Assert.True(repository.Disposed);
            Assert.True(service.Disposed);
        }
예제 #5
0
        public static DependencyCollection AddLogs(this DependencyCollection dependencies)
        {
            dependencies
            .AddSingleton <IRenderersCollection, RenderersCollection>()
            .AddFactory <ILogProvider, LogProvider>(factory => factory
                                                    .Lifetime(DependencyLifetime.Singleton)
                                                    .CreateIf <NullLogProvider>(engine => !engine.Contains(typeof(ILogWriter))))
            .AddSingleton(typeof(ILogger <>), typeof(Logger <>))
            .EnsureJsonEnabled();

            return(dependencies);
        }
예제 #6
0
        public static DependencyCollection AddJson(this DependencyCollection dependencies,
                                                   CultureInfo?culture = null)
        {
            dependencies
            .AddSingleton <JConverter>()
            .AddDependency(
                new[] { typeof(IConvertersCollection) },
                provider => new ConvertersCollection(provider, culture),
                DependencyLifetime.Singleton);

            return(dependencies);
        }
예제 #7
0
        public static DependencyCollection AddServer(this DependencyCollection dependencies)
        {
            if (dependencies.Contains <HttpServer>())
            {
                return(dependencies);
            }

            dependencies
            .AddSingleton <HttpServer>()
            .AddSingleton <HttpRouter>();

            return(dependencies);
        }
예제 #8
0
        public static DependencyCollection AddECS(this DependencyCollection dependencies)
        {
            dependencies
            .AddSingleton <IEntityState, EntityState>();

            //actors
            dependencies
            .AddFactory(new FilterFactory <IActorContext>(typeof(IActorFilter)))
            .AddFactory(new GroupFactory <IActorContext>(typeof(IActorGroup)))
            .AddFactory(new SingleFactory <IActorContext>(typeof(SingleActor <>)))
            .AddInstance <IActorContext>(new ActorContext())
            .AddSingleton <IActorFactory, ActorFactory>();

            // assets
            dependencies
            .AddFactory(new FilterFactory <IAssetContext>(typeof(IAssetFilter)))
            .AddFactory(new GroupFactory <IAssetContext>(typeof(IAssetGroup)))
            .AddFactory(new SingleFactory <IAssetContext>(typeof(SingleAsset <>)))
            .AddSingleton <IAssetContext, AssetContext>()
            .AddSingleton <AssetFactory>();

            // components
            dependencies
            .AddSingleton <IComponentFactory, ComponentFactory>();

            // systems
            dependencies
            .AddFactory <ISystemService, SystemService>(systemService => systemService.DependedLifetime())
            .AddFactory(new SystemPipelineFactory());

            // source
            dependencies
            .AddInstance(new SourceDescriptions())
            .AddSingleton(typeof(IEntitySourceContext <>), typeof(EntitySourceContext <>))
            .EnsureJsonEnabled();

            return(dependencies);
        }
예제 #9
0
        public void Two_Contracts()
        {
            var implementation = typeof(FooRepository);
            var contracts      = new[] { implementation, typeof(IRepository <Foo>) };

            var provider = _dependencies
                           .AddSingleton <ISession, Session>()
                           .AddDependency(contracts, implementation, DependencyLifetime.Transient)
                           .BuildProvider();

            var byImplementation = provider.GetRequiredService <FooRepository>();
            var byInterface      = provider.GetRequiredService <IRepository <Foo> >();

            Assert.NotSame(byImplementation, byInterface);
            Assert.IsType <FooRepository>(byInterface);
        }
예제 #10
0
        private static void AddSingleton(DependencyCollection dependencies, ServiceDescriptor descriptor)
        {
            if (descriptor.ImplementationInstance != null)
            {
                dependencies.AddInstance(descriptor.ServiceType, descriptor.ImplementationInstance);
            }
            else if (descriptor.ImplementationFactory == null)
            {
                dependencies.AddSingleton(descriptor.ServiceType, descriptor.ImplementationType);
            }
            else
            {
                var contracts = new[] { descriptor.ServiceType };
                var resolver  = BuildDelegateResolver(descriptor);

                dependencies.Add(new SingletonDependency(contracts, resolver));
            }
        }