constructor-igor / TechSugar

Tech. Sugar seminars
7 stars 6 forks source link

CastleWindsor - Plugin Demo #450

Open constructor-igor opened 4 years ago

constructor-igor commented 4 years ago

http://selfdocumenting.net/plugins-in-net-with-castle-windsor/

constructor-igor commented 4 years ago

client

            string pluginsFolder = Path.GetFullPath(@"..\..\..\Plugins");
            AssemblyFilter assemblyFilter = new AssemblyFilter(pluginsFolder);
            var container = new WindsorContainer();
            container.Register(Classes.FromAssemblyInDirectory(assemblyFilter).BasedOn<IDemoPlugin>().WithService.FromInterface());
            IDemoPlugin[] plugins = container.ResolveAll<IDemoPlugin>();
            Console.WriteLine($"In folder {pluginsFolder} found {plugins.Length} plugins.");

            foreach (IDemoPlugin plugin in plugins)
            {
                plugin.Run(null);
            }

            Console.WriteLine("Press Enter to exit.");
            Console.ReadLine();
constructor-igor commented 4 years ago

child container:

            WindsorContainer childContainer = new WindsorContainer();
            childContainer.Register(Component.For<MyChildService>());
            rootContainer.AddChildContainer(childContainer);
            childContainer.Resolve<MyRootService>().Run("child");
            childContainer.Resolve<MyChildService>().Run("child");

            try
            {
                Console.WriteLine("trying to resolve MyChildContainer in root container...");
                rootContainer.Resolve<MyChildService>().Run("root");
            }
            catch (Exception e)
            {
                Console.WriteLine($"Cannot resolve in root: {e.Message}");
            }