Example #1
0
        public static async Task <MopHost> BuildHost(string[] args, CancellationToken token)
        {
            var props = await HostPropertiesFactory.BuildPropertiesAsync(args);

            var injector   = new InjectorService();
            var mainSystem = ActorSystemFactory.BuildFrom(props);

            injector.RegisterService(() => props, LifeCycle.Singleton);
            injector.RegisterService(() => new MopLifeService(token), LifeCycle.Singleton);
            injector.RegisterService(() => mainSystem, LifeCycle.Singleton);
            injector.RegisterService <IInjectorService>(() => injector, LifeCycle.Singleton);
            injector.RegisterService <IRIPService, RIPService>(LifeCycle.Singleton);
            injector.RegisterService <IHost, MopHost>(LifeCycle.Singleton);
            injector.RegisterService <ILogService, LogService>(LifeCycle.Singleton);
            injector.RegisterService <IConfigService, ConfigService>(LifeCycle.Singleton);
            injector.RegisterService <IEventService, EventService>(LifeCycle.Singleton);
            injector.RegisterService <PluginLoader>(LifeCycle.Transient);
            injector.RegisterService <IPluginService, PluginService>(LifeCycle.Singleton);
            injector.RegisterService <AssemblyResolver>(LifeCycle.Transient);

            if (injector.GetService <AssemblyResolver>() is AssemblyResolver r)
            {
                r.RegisterAppDomain(AppDomain.CurrentDomain);
            }

            if (injector.GetService <IHost>() is MopHost host)
            {
                return(host);
            }

            throw new Exception("Failed to instantiate host");
        }