예제 #1
0
        public void AdaptingAGeneratedServiceYieldsASingleAdapter()
        {
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new MetaRegistrationSource());
            registry.AddRegistrationSource(new CollectionRegistrationSource());
            var metaCollections = registry.RegistrationsFor(
                new TypedService(typeof(Meta <IEnumerable <object> >)));

            Assert.AreEqual(1, metaCollections.Count());
        }
예제 #2
0
        public void AdaptingAnAdapterYieldsASingleAdapter()
        {
            var registry = new ComponentRegistry();

            registry.Register(RegistrationBuilder.ForType <object>().CreateRegistration());
            registry.AddRegistrationSource(new MetaRegistrationSource());
            registry.AddRegistrationSource(new GeneratedFactoryRegistrationSource());
            var metaCollections = registry.RegistrationsFor(
                new TypedService(typeof(Meta <Func <object> >)));

            Assert.AreEqual(1, metaCollections.Count());
        }
예제 #3
0
        public void WhenARegistrationSourceQueriesForTheSameService_ItIsNotRecursivelyQueried()
        {
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new RecursiveRegistrationSource());
            Assert.False(registry.IsRegistered(new UniqueService()));
        }
예제 #4
0
        public void LastRegistrationSourceRegisteredIsTheDefault()
        {
            var first    = new object();
            var second   = new object();
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new ObjectRegistrationSource(first));
            registry.AddRegistrationSource(new ObjectRegistrationSource(second));

            IComponentRegistration def;

            registry.TryGetRegistration(new TypedService(typeof(object)), out def);

            var result = def.Activator.ActivateInstance(Container.Empty, Enumerable.Empty <Parameter>());

            Assert.AreEqual(result, second);
        }
예제 #5
0
        public void WhenNoImplementerIsDirectlyRegistered_RegistrationCanBeProvidedDynamically()
        {
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new ObjectRegistrationSource());
            IComponentRegistration registration;

            Assert.IsTrue(registry.TryGetRegistration(new TypedService(typeof(object)), out registration));
        }
예제 #6
0
        public void WhenNoImplementationsRegistered_RegistrationsForServiceIncludeDynamicSources()
        {
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new ObjectRegistrationSource());
            Assert.IsFalse(registry.Registrations.Where(
                               r => r.Services.Contains(new TypedService(typeof(object)))).Any());
            Assert.AreEqual(1, registry.RegistrationsFor(new TypedService(typeof(object))).Count());
        }
예제 #7
0
        public void WhenAdaptersAreAppliedButNoRegistrationsCreated_AddingAdapteesAddsAdapters()
        {
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new GeneratedFactoryRegistrationSource());
            var adapterService = new TypedService(typeof(Func <object>));

            registry.RegistrationsFor(adapterService);
            registry.Register(RegistrationBuilder.ForType <object>().CreateRegistration());
            var adapters = registry.RegistrationsFor(adapterService);

            Assert.AreEqual(1, adapters.Count());
        }
예제 #8
0
        public void AddingConcreteImplementationWhenAdapterImplementationsExist_AddsChainedAdapters()
        {
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new GeneratedFactoryRegistrationSource());
            registry.AddRegistrationSource(new MetaRegistrationSource());
            registry.Register(RegistrationBuilder.ForType <object>().CreateRegistration());

            var chainedService = new TypedService(typeof(Meta <Func <object> >));

            var pre = registry.RegistrationsFor(chainedService);

            Assert.AreEqual(1, pre.Count());

            Func <object> func = () => new object();

            registry.Register(RegistrationBuilder.ForDelegate((c, p) => func).CreateRegistration());

            var post = registry.RegistrationsFor(chainedService);

            Assert.AreEqual(2, post.Count());
        }
예제 #9
0
        public void WhenRegistrationProvidedExplicitlyAndThroughRegistrationSource_Reordered_BothAreReturnedFromRegistrationsFor()
        {
            var r = Factory.CreateSingletonObjectRegistration();

            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new ObjectRegistrationSource());
            registry.Register(r);

            var forObject = registry.RegistrationsFor(new TypedService(typeof(object)));

            Assert.AreEqual(2, forObject.Count());
        }
예제 #10
0
        public void AfterResolvingAdapterType_AddingAnAdapter_AddsAdaptingComponents()
        {
            var registry = new ComponentRegistry();

            registry.Register(RegistrationBuilder.ForType <object>().CreateRegistration());
            var adapterService = new TypedService(typeof(Func <object>));
            var pre            = registry.RegistrationsFor(adapterService);

            Assert.AreEqual(0, pre.Count());
            registry.AddRegistrationSource(new GeneratedFactoryRegistrationSource());
            var post = registry.RegistrationsFor(adapterService);

            Assert.AreEqual(1, post.Count());
        }
예제 #11
0
        public void WhenRegistrationsAddedBeforeAndAfterSource_BothAreSeenBySource()
        {
            var r1 = Factory.CreateSingletonObjectRegistration();
            var r2 = Factory.CreateSingletonObjectRegistration();

            var registry = new ComponentRegistry();

            registry.Register(r1);
            registry.AddRegistrationSource(new GeneratedFactoryRegistrationSource());
            registry.Register(r2);

            var wrappedObjects = registry.RegistrationsFor(new TypedService(typeof(Func <object>)));

            Assert.AreEqual(2, wrappedObjects.Count());
        }
예제 #12
0
        public void WhenRegistrationProvidedExplicitlyAndThroughRegistrationSource_ExplicitRegistrationIsDefault()
        {
            var r = Factory.CreateSingletonObjectRegistration();

            var registry = new ComponentRegistry();

            registry.Register(r);
            registry.AddRegistrationSource(new ObjectRegistrationSource());

            IComponentRegistration defaultForObject;

            registry.TryGetRegistration(new TypedService(typeof(object)), out defaultForObject);

            Assert.AreSame(r, defaultForObject);
        }
예제 #13
0
        public void WhenRegistrationProvidedExplicitlyAndThroughRegistrationSource_BothAreReturnedFromRegistrationsFor()
        {
            var r = Factory.CreateSingletonObjectRegistration();

            var registry = new ComponentRegistry();

            registry.Register(r);
            registry.AddRegistrationSource(new ObjectRegistrationSource());

            var forObject = registry.RegistrationsFor(new TypedService(typeof(object)));

            Assert.Equal(2, forObject.Count());

            // Just paranoia - make sure we don't regenerate
            forObject = registry.RegistrationsFor(new TypedService(typeof(object)));

            Assert.Equal(2, forObject.Count());
        }
예제 #14
0
        public void WhenASourceIsAddedToTheRegistry_TheSourceAddedEventIsRaised()
        {
            var registry = new ComponentRegistry();

            object sender = null;
            RegistrationSourceAddedEventArgs args = null;

            registry.RegistrationSourceAdded += (s, e) =>
            {
                sender = s;
                args   = e;
            };

            var source = new ObjectRegistrationSource();

            registry.AddRegistrationSource(source);

            Assert.AreSame(registry, sender);
            Assert.AreSame(registry, args.ComponentRegistry);
            Assert.AreSame(source, args.RegistrationSource);
        }
예제 #15
0
        public void AfterResolvingAdapter_AddingMoreAdaptees_AddsMoreAdapters()
        {
            var registry = new ComponentRegistry();

            registry.AddRegistrationSource(new MetaRegistrationSource());
            var metaService = new TypedService(typeof(Meta <object>));

            var first = RegistrationBuilder.ForType <object>().CreateRegistration();

            registry.Register(first);

            var meta1     = registry.RegistrationsFor(metaService);
            var firstMeta = meta1.First();

            var second = RegistrationBuilder.ForType <object>().CreateRegistration();

            registry.Register(second);

            var meta2 = registry.RegistrationsFor(metaService);

            Assert.That(meta2.Count(), Is.EqualTo(2));
            Assert.That(meta2.Contains(firstMeta));
            Assert.That(meta2.Select(m => m.Target), Is.EquivalentTo(new[] { first, second }));
        }
예제 #16
0
 /// <summary>
 ///	 Initializes a new instance of the <see cref="AutofacMoqContainer" /> class with
 /// </summary>
 /// <param name="defaultBehavior">The default <see cref="MockBehavior"/>.</param>
 public AutofacMoqContainer(IContainer container, MockBehavior behavior) : base(container)
 {
     _defaultBehavior = behavior;
     Locator          = new AutofacServiceLocator(this);
     ComponentRegistry.AddRegistrationSource(_registrationSource = new MoqRegistrationSource(_defaultBehavior));
 }