コード例 #1
0
        public void StaticInstanceSameAsCreateInstance()
        {
            PrismContainerExtension.Reset();
            var created = PrismContainerExtension.Create(new Container());

            Assert.Same(created, PrismContainerExtension.Current);
        }
コード例 #2
0
        public void StaticInstanceSameAsNewInstance()
        {
            PrismContainerExtension.Reset();
            var newInstance = new PrismContainerExtension();

            Assert.Same(newInstance, PrismContainerExtension.Current);
        }
コード例 #3
0
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // Core Services
            PrismContainerExtension.Create(Container.GetContainer());
            containerRegistry.Register <IFileService, FileService>();

            // App Services
            containerRegistry.Register <IApplicationInfoService, ApplicationInfoService>();
            containerRegistry.Register <ISystemService, SystemService>();
            containerRegistry.Register <IPersistAndRestoreService, PersistAndRestoreService>();
            containerRegistry.Register <IThemeSelectorService, ThemeSelectorService>();
            containerRegistry.RegisterSingleton <IToastNotificationsService, ToastNotificationsService>();

            // Views
            containerRegistry.RegisterForNavigation <SettingsPage, SettingsViewModel>(PageKeys.Settings);
            containerRegistry.RegisterForNavigation <MainPage, MainViewModel>(PageKeys.Main);
            containerRegistry.RegisterForNavigation <ShellWindow, ShellViewModel>();

            // Configuration
            var configuration = BuildConfiguration();
            var appConfig     = configuration
                                .GetSection(nameof(AppConfig))
                                .Get <AppConfig>();

            // Register configurations to IoC
            containerRegistry.RegisterInstance <IConfiguration>(configuration);
            containerRegistry.RegisterInstance <AppConfig>(appConfig);
        }
コード例 #4
0
        public void SingletonFactoryIsResolved()
        {
            lock (testLock)
            {
                PrismContainerExtension.Reset();
                GC.Collect();

                int counter  = 0;
                var services = new ServiceCollection();
                services.AddSingleton <IFoo>(sp => new Foo {
                    Message = $"Foo has been resolved {++counter} time(s)."
                });
                PrismContainerExtension.Current.CreateServiceProvider(services);

                IFoo foo = null;
                var  ex  = Record.Exception(() => foo = PrismContainerExtension.Current.Resolve <IFoo>());

                Assert.Null(ex);
                Assert.NotNull(foo);
                Assert.Equal(1, counter);
                Assert.Equal("Foo has been resolved 1 time(s).", foo.Message);

                var foo2 = PrismContainerExtension.Current.Resolve <IFoo>();

                Assert.Equal(1, counter);
                Assert.Same(foo, foo2);
                Assert.Equal("Foo has been resolved 1 time(s).", foo2.Message);
            }
        }
コード例 #5
0
        public static void InitializeContainer(Action <IContainer> registerPlatformService)
        {
            var container = new Container();

            registerPlatformService(container);

            PrismContainerExtension.Init(container);
            ContainerLocator.SetContainerExtension(() => PrismContainerExtension.Current);
        }
コード例 #6
0
        public void CreateCanOnlyBeCalledOnce()
        {
            var newInstance1 = CreateContainer();

            Assert.Same(newInstance1, PrismContainerExtension.Current);

            var ex = Record.Exception(() => PrismContainerExtension.Init());

            Assert.NotNull(ex);
            Assert.IsType <NotSupportedException>(ex);
        }
コード例 #7
0
        public void RegisterInstanceResolveSameNamedInstance()
        {
            PrismContainerExtension.Reset();
            var c   = PrismContainerExtension.Current;
            var foo = new Foo();

            c.RegisterInstance <IFoo>(foo, "test");

            Assert.True(c.IsRegistered <IFoo>("test"));
            Assert.Same(foo, c.Resolve <IFoo>("test"));
        }
コード例 #8
0
        public void WarningGeneratedFromMultipleInstances()
        {
            PrismContainerExtension.Reset();
            var listener = new MockListener();

            Trace.Listeners.Add(listener);
            var newInstance1 = new PrismContainerExtension();
            var newInstance2 = new PrismContainerExtension();

            Assert.Single(listener.Messages);
            Assert.NotSame(newInstance1, PrismContainerExtension.Current);
            Assert.Same(newInstance2, PrismContainerExtension.Current);
        }
        public void ScopedServiceNotSupported()
        {
            var services = new ServiceCollection();

            services.AddScoped <IFoo, Foo>();
            var container = new PrismContainerExtension();
            IServiceProvider serviceProvider = null;

            var ex = Record.Exception(() => serviceProvider = container.CreateServiceProvider(services));

            Assert.NotNull(ex);
            Assert.IsType <NotSupportedException>(ex);
        }
コード例 #10
0
        public void RegisterTransientService()
        {
            PrismContainerExtension.Reset();
            var c = PrismContainerExtension.Current;

            c.Register <IFoo, Foo>();
            IFoo foo = null;
            var  ex  = Record.Exception(() => foo = c.Resolve <IFoo>());

            Assert.Null(ex);
            Assert.NotNull(foo);
            Assert.IsType <Foo>(foo);
        }
コード例 #11
0
ファイル: App.xaml.cs プロジェクト: cocoa-mhlw/cocoa
        // Initialize IOC container
        public static void InitializeServiceLocator(Action <IContainer> registerPlatformTypes)
        {
            if (!FirstLoad)
            {
                return;
            }

            var container = new Container(GetContainerRules());

            registerPlatformTypes(container);
            RegisterCommonTypes(container);

            PrismContainerExtension.Init(container);
            ContainerLocator.SetContainerExtension(() => PrismContainerExtension.Current);
        }
コード例 #12
0
        public void FactoryCreatesSingletonTypeWithoutContainerProvider()
        {
            PrismContainerExtension.Reset();
            var c       = PrismContainerExtension.Current;
            var message = "expected";

            c.RegisterSingletonFromDelegate <IFoo>(FooFactory);

            IFoo foo = null;
            var  ex  = Record.Exception(() => foo = c.Resolve <IFoo>());

            Assert.Null(ex);
            Assert.Equal(message, foo.Message);

            Assert.Same(foo, c.Resolve <IFoo>());
        }
コード例 #13
0
        public void SingletonServiceIsRegistered()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IFoo, Foo>();
            var container       = PrismContainerExtension.Init();
            var serviceProvider = container.CreateServiceProvider(services);

            object service = null;
            var    ex      = Record.Exception(() => service = serviceProvider.GetService(typeof(IFoo)));

            Assert.Null(ex);
            Assert.NotNull(service);
            Assert.IsAssignableFrom <IFoo>(service);
            Assert.IsType <Foo>(service);

            Assert.Same(service, serviceProvider.GetService(typeof(IFoo)));
        }
コード例 #14
0
        public void RegisterSingletonNamedService()
        {
            PrismContainerExtension.Reset();
            var c = PrismContainerExtension.Current;

            c.RegisterSingleton <IFoo, Foo>("fooBar");
            IFoo foo = null;
            var  ex  = Record.Exception(() => foo = c.Resolve <IFoo>());

            Assert.NotNull(ex);

            ex = null;
            ex = Record.Exception(() => foo = c.Resolve <IFoo>("fooBar"));

            Assert.Null(ex);
            Assert.NotNull(foo);
            Assert.IsType <Foo>(foo);

            Assert.Same(foo, c.Resolve <IFoo>("fooBar"));
        }
コード例 #15
0
        public void FactoryCreatesSingletonTypeWithServiceProviderFromGeneric()
        {
            PrismContainerExtension.Reset();
            var c = PrismContainerExtension.Current;
            var expectedMessage = "constructed with IServiceProvider";

            c.RegisterSingletonFromDelegate <IBar>(BarFactoryWithIServiceProvider);
            c.RegisterInstance <IFoo>(new Foo {
                Message = expectedMessage
            });

            IBar bar = null;
            var  ex  = Record.Exception(() => bar = c.Resolve <IBar>());

            Assert.Null(ex);
            Assert.False(string.IsNullOrWhiteSpace(bar.Foo.Message));
            Assert.Equal(expectedMessage, bar.Foo.Message);

            Assert.Same(bar, c.Resolve <IBar>());
        }
コード例 #16
0
        public void ScopedServiceIsSupported()
        {
            lock (testLock)
            {
                PrismContainerExtension.Reset();
                GC.Collect();

                var services = new ServiceCollection();
                services.AddScoped <IFoo, Foo>();

                var container = PrismContainerExtension.Current;
                IServiceProvider serviceProvider = null;

                var ex = Record.Exception(() => serviceProvider = container.CreateServiceProvider(services));

                Assert.Null(ex);

                Assert.True(((IContainerProvider)container).IsRegistered <IFoo>());
            }
        }
コード例 #17
0
        public void FactoryCreatesSingletonTypeWithContainerProviderWithGeneric()
        {
            PrismContainerExtension.Reset();
            var c = PrismContainerExtension.Current;

            var expectedMessage = "constructed with IContainerProvider";

            c.RegisterSingletonFromDelegate <IBar>(BarFactoryWithIContainerProvider);
            c.RegisterSingleton <IFoo, Foo>();

            IBar bar = null;
            var  ex  = Record.Exception(() => bar = c.Resolve <IBar>());

            Assert.Null(ex);
            Assert.IsType <Bar>(bar);
            Assert.Equal(expectedMessage, ((Bar)bar).Message);

            Assert.Same(c.Resolve <IFoo>(), bar.Foo);
            Assert.Same(c.Resolve <IBar>(), bar);
        }
コード例 #18
0
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // Core Services
            containerRegistry.Register <IMicrosoftGraphService, MicrosoftGraphService>();

            PrismContainerExtension.Create(Container.GetContainer());
            PrismContainerExtension.Current.RegisterServices(s =>
            {
                s.AddHttpClient("msgraph", client =>
                {
                    client.BaseAddress = new System.Uri("https://graph.microsoft.com/v1.0/");
                });
            });

            containerRegistry.Register <IIdentityCacheService, IdentityCacheService>();
            containerRegistry.RegisterSingleton <IIdentityService, IdentityService>();
            containerRegistry.Register <IFileService, FileService>();

            // App Services
            containerRegistry.RegisterSingleton <IUserDataService, UserDataService>();
            containerRegistry.Register <ISystemService, SystemService>();
            containerRegistry.Register <IPersistAndRestoreService, PersistAndRestoreService>();
            containerRegistry.Register <IThemeSelectorService, ThemeSelectorService>();

            // Views
            containerRegistry.RegisterForNavigation <SettingsPage, SettingsViewModel>(PageKeys.Settings);
            containerRegistry.RegisterForNavigation <MainPage, MainViewModel>(PageKeys.Main);
            containerRegistry.RegisterForNavigation <ShellWindow, ShellViewModel>();

            // Configuration
            var configuration = BuildConfiguration();
            var appConfig     = configuration
                                .GetSection(nameof(AppConfig))
                                .Get <AppConfig>();

            // Register configurations to IoC
            containerRegistry.RegisterInstance <IConfiguration>(configuration);
            containerRegistry.RegisterInstance <AppConfig>(appConfig);
        }
コード例 #19
0
        public void ResolveWithSpecifiedTypeOverridesRegistration()
        {
            PrismContainerExtension.Reset();
            var c = PrismContainerExtension.Current;

            c.Register <IBar, Bar>();
            var foo = new Foo {
                Message = "This shouldn't be resolved"
            };

            c.RegisterInstance <IFoo>(foo);

            var overrideFoo = new Foo {
                Message = "We expect this one"
            };

            Assert.Same(foo, c.Resolve <IFoo>());

            var bar = c.Resolve <IBar>((typeof(IFoo), overrideFoo));

            Assert.Same(overrideFoo, bar.Foo);
        }
コード例 #20
0
        public void SingletonInstanceIsResolved()
        {
            lock (testLock)
            {
                PrismContainerExtension.Reset();
                GC.Collect();

                var foo = new Foo();
                var services = new ServiceCollection(); services.AddSingleton <IFoo>(foo); var container = PrismContainerExtension.Create();
                var serviceProvider = container.CreateServiceProvider(services);

                object service = null;
                var    ex      = Record.Exception(() => service = serviceProvider.GetService(typeof(IFoo)));

                Assert.Null(ex);
                Assert.NotNull(service);
                Assert.IsAssignableFrom <IFoo>(service);
                Assert.IsType <Foo>(service);

                Assert.Same(foo, service);
            }
        }
コード例 #21
0
        public void TransientServiceIsRegistered()
        {
            lock (testLock)
            {
                PrismContainerExtension.Reset();
                GC.Collect();

                var services = new ServiceCollection();
                services.AddTransient <IFoo, Foo>();
                var container       = PrismContainerExtension.Init();
                var serviceProvider = container.CreateServiceProvider(services);

                object service = null;
                var    ex      = Record.Exception(() => service = serviceProvider.GetService(typeof(IFoo)));

                Assert.Null(ex);
                Assert.NotNull(service);
                Assert.IsAssignableFrom <IFoo>(service);
                Assert.IsType <Foo>(service);

                Assert.NotSame(service, serviceProvider.GetService(typeof(IFoo)));
            }
        }
コード例 #22
0
        public void RegisterManyHasSameInstanceAcrossServices()
        {
            PrismContainerExtension.Reset();
            var c = PrismContainerExtension.Current;

            c.RegisterManySingleton <FooBarImpl>();

            IFoo foo = null;
            IBar bar = null;
            var  ex  = Record.Exception(() => foo = c.Resolve <IFoo>());

            Assert.Null(ex);
            Assert.NotNull(foo);
            Assert.IsType <FooBarImpl>(foo);

            ex = Record.Exception(() => bar = c.Resolve <IBar>());

            Assert.Null(ex);
            Assert.NotNull(bar);
            Assert.IsType <FooBarImpl>(bar);

            Assert.Same(foo, bar);
        }
コード例 #23
0
//}]}
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // Core Services
//{[{
            containerRegistry.Register <IMicrosoftGraphService, MicrosoftGraphService>();

            PrismContainerExtension.Create(Container.GetContainer());
            PrismContainerExtension.Current.RegisterServices(s =>
            {
                s.AddHttpClient("msgraph", client =>
                {
                    client.BaseAddress = new System.Uri("https://graph.microsoft.com/v1.0/");
                });
            });

            containerRegistry.Register <IIdentityCacheService, IdentityCacheService>();
            containerRegistry.RegisterSingleton <IIdentityService, IdentityService>();
//}]}
            // App Services
//{[{
            containerRegistry.RegisterSingleton <IUserDataService, UserDataService>();
//}]}
        }
コード例 #24
0
 public PrismApplicationTests()
 {
     Xamarin.Forms.Mocks.MockForms.Init();
     PrismContainerExtension.Init();
 }
コード例 #25
0
 public MicrosoftExtensionsTests()
 {
     PrismContainerExtension.Reset();
 }
コード例 #26
0
 protected override IContainerExtension Init() => PrismContainerExtension.Init();
コード例 #27
0
 public void Dispose()
 {
     PrismContainerExtension.Reset();
     PageNavigationRegistry.ClearRegistrationCache();
 }
コード例 #28
0
 public CommonAspNetServiceTests()
 {
     PrismContainerExtension.Reset();
 }
コード例 #29
0
 protected override IContainerExtension CreateContainerExtension()
 {
     return(PrismContainerExtension.Current ?? PrismContainerExtension.Create());
 }
コード例 #30
0
 private AppMock CreateApp(string runtimePlatform = "Test")
 {
     Xamarin.Forms.Mocks.MockForms.Init(runtimePlatform);
     PrismContainerExtension.Reset();
     return(new AppMock());
 }