public void Factory_export_provider_can_resolve_service_registered_using_factory_method() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider() .Register(typeof(IExternalComponent), ep => new ExternalComponent1()) .Register(typeof(ExternalComponent2), ep => new ExternalComponent2()); var container = new CompositionContainer(assemblyCatalog, provider); var externalComponent = container.GetExportedValue <IExternalComponent>(); Assert.That(externalComponent, Is.Not.Null); Assert.That(externalComponent.GetType(), Is.EqualTo(typeof(ExternalComponent1))); var externalComponent2 = container.GetExportedValue <ExternalComponent2>(); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var mefComponent = container.GetExportedValue <IMefComponent>(); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent1))); }
public void Factory_export_provider_executes_the_factory_each_time_the_instance_is_requested() { var count = 0; // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(typeof(ExternalComponent2), ep => { count++; return(new ExternalComponent2()); }); var container = new CompositionContainer(assemblyCatalog, provider); var externalComponent1 = container.GetExportedValue <ExternalComponent2>(); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var externalComponent2 = container.GetExportedValue <ExternalComponent2>(); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(count, Is.EqualTo(2)); }
public void Factory_export_provider_can_resolve_single_instance_given_by_registration_name_registered_using_generic_overload() { var count = 0; // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(); var container = new CompositionContainer(assemblyCatalog, provider); provider.SourceProvider = container; provider.RegisterInstance <IExternalComponent>("ext2", ep => { count++; return(new ExternalComponent2()); }); var externalComponent1 = container.GetExportedValue <IExternalComponent>("ext2"); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var externalComponent2 = container.GetExportedValue <IExternalComponent>("ext2"); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(count, Is.EqualTo(1)); Assert.That(externalComponent1, Is.EqualTo(externalComponent2)); }
public void Factory_export_provider_can_resolve_additional_exports_from_the_container() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider() .RegisterInstance <IExternalComponent>(ep => new ExternalComponent2()) .Register <IExternalComponent>("ext", ep => new ExternalComponent4( ep.GetExportedValue <IExternalComponent>(), ep.GetExportedValue <IMefComponent>())); var container = new CompositionContainer(assemblyCatalog, provider); provider.SourceProvider = container; var externalComponent1 = container.GetExportedValue <IExternalComponent>("ext"); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent4))); var externalComponent14 = (ExternalComponent4)externalComponent1; Assert.That(externalComponent14.ExternalComponent, Is.Not.Null); Assert.That(externalComponent14.MefComponent, Is.Not.Null); Assert.That(externalComponent14.ExternalComponent.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(externalComponent14.MefComponent.GetType(), Is.EqualTo(typeof(MefComponent1))); }
/// <summary> /// Initializes a new instance of the ViewModelLocator class. /// </summary> public ViewModelLocator() { if (GalaSoft.MvvmLight.ViewModelBase.IsInDesignModeStatic) { m_Container = new CompositionContainer( new DesignTimeCatalog( new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()))); } else { #if Db4o Db4objects.Db4o.Db4oFactory.Configure().CallConstructors(true); var server = Db4objects.Db4o.CS.Db4oClientServer.OpenServer(c_Storage, 0); var factory = new Func<ExportProvider, IDomainContext>( ep => new Domain.Db4o.Db4oDomainContext(server.OpenClient())); #elif Ef var factory = new DelegateDomainContextFactory(() => new Domain.Ef.EfDomainContext()); #endif var provider = new FactoryExportProvider(); provider.Register<IDomainContext>(factory); m_Container = new CompositionContainer( new DesignTimeCatalog( new AggregateCatalog( new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()), new DirectoryCatalog("Plugins"))), provider); } m_Container.ComposeExportedValue<IMessageBus>(new MessageBus()); }
public void Factory_export_provider_can_resolve_single_instance() { var count = 0; // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(); var container = new CompositionContainer(assemblyCatalog, provider); provider.RegisterInstance(typeof(IExternalComponent), ep => { count++; return(new ExternalComponent1()); }); var externalComponent1 = container.GetExportedValue <IExternalComponent>(); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); var externalComponent2 = container.GetExportedValue <IExternalComponent>(); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(count, Is.EqualTo(1)); Assert.That(externalComponent1, Is.EqualTo(externalComponent2)); }
/// <summary> /// Initializes a new instance of the ViewModelLocator class. /// </summary> public ViewModelLocator() { if (GalaSoft.MvvmLight.ViewModelBase.IsInDesignModeStatic) { m_Container = new CompositionContainer( new DesignTimeCatalog( new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()))); } else { #if Db4o Db4objects.Db4o.Db4oFactory.Configure().CallConstructors(true); var server = Db4objects.Db4o.CS.Db4oClientServer.OpenServer(c_Storage, 0); var factory = new Func <ExportProvider, IDomainContext>( ep => new Domain.Db4o.Db4oDomainContext(server.OpenClient())); #elif Ef var factory = new DelegateDomainContextFactory(() => new Domain.Ef.EfDomainContext()); #endif var provider = new FactoryExportProvider(); provider.Register <IDomainContext>(factory); m_Container = new CompositionContainer( new DesignTimeCatalog( new AggregateCatalog( new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()), new DirectoryCatalog("Plugins"))), provider); } m_Container.ComposeExportedValue <IMessageBus>(new MessageBus()); }
/// <summary> /// Initializes a new instance of <see cref="ContainerExportProvider"/> class. /// </summary> /// <param name="containerAdapter">An instance of the <see cref="IContainerAdapter"/> interface.</param> public ContainerExportProvider(IContainerAdapter containerAdapter) { if (containerAdapter == null) throw new ArgumentNullException("containerAdapter"); this.factoryProvider = new PrivateFactoryExportProvider(FactoryMethod); this.containerAdapter = containerAdapter; this.containerAdapter.RegisteringComponent += OnRegisteringComponentHandler; // Initialize the adapter this.containerAdapter.Initialize(); }
/// <summary> /// Initializes a new instance of <see cref="ContainerExportProvider"/> class. /// </summary> /// <param name="containerAdapter">An instance of the <see cref="IContainerAdapter"/> interface.</param> public ContainerExportProvider(IContainerAdapter containerAdapter) { if (containerAdapter == null) { throw new ArgumentNullException("containerAdapter"); } this.factoryProvider = new PrivateFactoryExportProvider(FactoryMethod); this.containerAdapter = containerAdapter; this.containerAdapter.RegisteringComponent += OnRegisteringComponentHandler; // Initialize the adapter this.containerAdapter.Initialize(); }
public void ExportProviderResolvesServiceRegisteredByTypeAndOrRegistrationNameTest() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(FactoryMethod1); var container = new CompositionContainer(assemblyCatalog, provider); // Registration provider.Register(typeof(IExternalComponent)); provider.Register(typeof(IExternalComponent), "external2"); var mefComponent = container.GetExportedValue<IMefComponent>("component3"); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); }
public void Export_provider_can_resolve_service_registered_by_type_and_or_registration_name() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(FactoryMethod1); var container = new CompositionContainer(assemblyCatalog, provider); // Registration provider.Register(typeof(IExternalComponent)); provider.Register(typeof(IExternalComponent), "external2"); var mefComponent = container.GetExportedValue <IMefComponent>("component3"); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); }
public void ExportProviderProperlyResolvesServicesFromManyExportProvidersTest() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider1 = new FactoryExportProvider(FactoryMethod2_1); var provider2 = new FactoryExportProvider(FactoryMethod2_2); var container = new CompositionContainer(assemblyCatalog, provider1, provider2); // Registration provider1.Register(typeof(IExternalComponent)); provider2.Register(typeof(IExternalComponent), "external2"); var mefComponent = container.GetExportedValue<IMefComponent>("component3"); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); mefComponent = container.GetExportedValue<IMefComponent>("component4"); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); }
public void Factory_export_provider_throws_exception_when_resolving_unknown_parts() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(); var container = new CompositionContainer(assemblyCatalog, provider); provider.SourceProvider = provider; provider.RegisterInstance <IExternalComponent>("ext", ep => new ExternalComponent2()); Assert.That(delegate { container.GetExportedValue <IExternalComponent>(); }, Throws.TypeOf <ImportCardinalityMismatchException>()); var externalComponent2 = container.GetExportedValue <IExternalComponent>("ext"); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); }
public void Container_can_resolve_services_from_two_factory_export_providers() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider1 = new FactoryExportProvider(FactoryMethod2_1); var provider2 = new FactoryExportProvider(FactoryMethod2_2); var container = new CompositionContainer(assemblyCatalog, provider1, provider2); // Registration provider1.Register(typeof(IExternalComponent)); provider2.Register(typeof(IExternalComponent), "external2"); var mefComponent = container.GetExportedValue <IMefComponent>("component3"); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); mefComponent = container.GetExportedValue <IMefComponent>("component4"); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); }
public void Export_provider_can_resolve_service_registered_by_type_and_registration_name() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(FactoryMethod1); var container = new CompositionContainer(assemblyCatalog, provider); // Registration provider.Register(typeof(IExternalComponent), "external2"); var externalComponent = container.GetExportedValue<IExternalComponent>("external2"); Assert.That(externalComponent, Is.Not.Null); Assert.That(externalComponent.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var mefComponent = container.GetExportedValue<IMefComponent>("component2"); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); }
public void FactoryExportProviderResolvesSingleInstanceTest() { var count = 0; // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(); var container = new CompositionContainer(assemblyCatalog, provider); provider.RegisterInstance(typeof(IExternalComponent), ep => { count++; return new ExternalComponent1(); }); var externalComponent1 = container.GetExportedValue<IExternalComponent>(); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); var externalComponent2 = container.GetExportedValue<IExternalComponent>(); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(count, Is.EqualTo(1)); Assert.That(externalComponent1, Is.EqualTo(externalComponent2)); }
public void FactoryExportProviderResolvesServiceRegisteredUsingGivenFactoryMethodTest() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider() .Register(typeof (IExternalComponent), ep => new ExternalComponent1()) .Register(typeof (ExternalComponent2), ep => new ExternalComponent2()); var container = new CompositionContainer(assemblyCatalog, provider); var externalComponent = container.GetExportedValue<IExternalComponent>(); Assert.That(externalComponent, Is.Not.Null); Assert.That(externalComponent.GetType(), Is.EqualTo(typeof(ExternalComponent1))); var externalComponent2 = container.GetExportedValue<ExternalComponent2>(); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var mefComponent = container.GetExportedValue<IMefComponent>(); Assert.That(mefComponent, Is.Not.Null); Assert.That(mefComponent.Component1.GetType(), Is.EqualTo(typeof(ExternalComponent1))); Assert.That(mefComponent.Component2.GetType(), Is.EqualTo(typeof(ExternalComponent1))); }
public void FactoryExportProviderResolvesAdditionalExportsFromTheFactoryTest() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(); var container = new CompositionContainer(assemblyCatalog, provider); provider.SourceProvider = provider; provider.RegisterInstance<IExternalComponent>(ep => new ExternalComponent2()); provider.Register<IExternalComponent>("ext3", ep => new ExternalComponent3(ep.GetExportedValue<IExternalComponent>())); var externalComponent1 = container.GetExportedValue<IExternalComponent>("ext3"); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent3))); var externalComponent13 = (ExternalComponent3) externalComponent1; Assert.That(externalComponent13.ExternalComponent, Is.Not.Null); Assert.That(externalComponent13.ExternalComponent.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var externalComponent2 = container.GetExportedValue<IExternalComponent>("ext3"); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent3))); var externalComponent23 = (ExternalComponent3)externalComponent1; Assert.That(externalComponent23.ExternalComponent, Is.Not.Null); Assert.That(externalComponent23.ExternalComponent.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(externalComponent13.ExternalComponent, Is.SameAs(externalComponent23.ExternalComponent)); }
public void FactoryExportProviderResolvesAdditionalExportsFromTheContainerTest() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider() .RegisterInstance<IExternalComponent>(ep => new ExternalComponent2()) .Register<IExternalComponent>("ext", ep => new ExternalComponent4( ep.GetExportedValue<IExternalComponent>(), ep.GetExportedValue<IMefComponent>())); var container = new CompositionContainer(assemblyCatalog, provider); provider.SourceProvider = container; var externalComponent1 = container.GetExportedValue<IExternalComponent>("ext"); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent4))); var externalComponent14 = (ExternalComponent4)externalComponent1; Assert.That(externalComponent14.ExternalComponent, Is.Not.Null); Assert.That(externalComponent14.MefComponent, Is.Not.Null); Assert.That(externalComponent14.ExternalComponent.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(externalComponent14.MefComponent.GetType(), Is.EqualTo(typeof(MefComponent1))); }
public void FactoryExportProviderExecutesTheFactoryEachTimeTheInstanceIsNeadedTest() { var count = 0; // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(typeof (ExternalComponent2), ep => { count++; return new ExternalComponent2(); }); var container = new CompositionContainer(assemblyCatalog, provider); var externalComponent1 = container.GetExportedValue<ExternalComponent2>(); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var externalComponent2 = container.GetExportedValue<ExternalComponent2>(); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(count, Is.EqualTo(2)); }
public void FactoryExportProviderDoesNotResolveUnknownPartsTest() { // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(); var container = new CompositionContainer(assemblyCatalog, provider); provider.SourceProvider = provider; provider.RegisterInstance<IExternalComponent>("ext", ep => new ExternalComponent2()); Assert.That(delegate { container.GetExportedValue<IExternalComponent>(); }, Throws.TypeOf<ImportCardinalityMismatchException>()); var externalComponent2 = container.GetExportedValue<IExternalComponent>("ext"); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); }
public void Factory_export_provider_can_resolve_single_instance_given_by_registration_name_registered_using_generic_overload() { var count = 0; // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(); var container = new CompositionContainer(assemblyCatalog, provider); provider.SourceProvider = container; provider.RegisterInstance<IExternalComponent>("ext2", ep => { count++; return new ExternalComponent2(); }); var externalComponent1 = container.GetExportedValue<IExternalComponent>("ext2"); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var externalComponent2 = container.GetExportedValue<IExternalComponent>("ext2"); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(count, Is.EqualTo(1)); Assert.That(externalComponent1, Is.EqualTo(externalComponent2)); }
public void Factory_export_provider_executes_the_factory_each_time_the_instance_is_requested() { var count = 0; // Setup var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var provider = new FactoryExportProvider(typeof (ExternalComponent2), ep => { count++; return new ExternalComponent2(); }); var container = new CompositionContainer(assemblyCatalog, provider); var externalComponent1 = container.GetExportedValue<ExternalComponent2>(); Assert.That(externalComponent1, Is.Not.Null); Assert.That(externalComponent1.GetType(), Is.EqualTo(typeof(ExternalComponent2))); var externalComponent2 = container.GetExportedValue<ExternalComponent2>(); Assert.That(externalComponent2, Is.Not.Null); Assert.That(externalComponent2.GetType(), Is.EqualTo(typeof(ExternalComponent2))); Assert.That(count, Is.EqualTo(2)); }