Jeg er ved at lave noget kode til et projekt jeg har gang i. Projektet omhandler hvordan man laver integrations test (mere om det en anden gang).

Til det har jeg brug for at overskrive de ting som ryger i ServiceCollection som man sætter op i Startup, men hvordan virker det? Kan man overskrive en implementation? Og hvad vælger den når man resolver: den første eller den sidste? Min mavefornemmelse siger mig at det er den sidste, som bliver resolved, men jeg kunne jo tage fejl. Lad os lave nøj kooj!!

    using Microsoft.Extensions.DependencyInjection;
    using System;
    using System.Collections.Generic;

    namespace TestApp
    {
        interface IInterface
        {
            public void Work();
        }

        public class ImplA : IInterface
        {
            public void Work()
            {
                Console.WriteLine("\tImplA");
            }
        }

        public class ImplB : IInterface
        {
            public void Work()
            {
                Console.WriteLine("\tImplB");
            }
        }

        class Program
        {
            static void Main(string[] args)
            {
                var serviceProvider = new ServiceCollection()
                    .AddSingleton<IInterface, ImplA>()
                    .AddSingleton<IInterface, ImplB>()
                    .BuildServiceProvider();

                Console.WriteLine("What implmentation is picked? First or last?");

                var bar = serviceProvider.GetService<IInterface>();
                bar.Work();

                var all = serviceProvider.GetService<IEnumerable<IInterface>>();

                Console.WriteLine("List all");

                foreach(var i in all)
                {
                    i.Work();
                }

                Console.WriteLine("All done!");
            }
        }
    }

Kører man overstående får man den sidste ved bar.Work(). Den lister efterfølgende alle registerede ud.

God dag deruhhhh!!!