Совместное использование экземпляра между модулями

#c# #autofac #autofac-module

#c# #autofac #autofac-модуль

Вопрос:

У меня есть два модуля autofac WorldModule и RegionModule (отдельный класс, который наследует Module) и перезаписывает функцию загрузки. Оба должны совместно использовать worldService, сервис, который использует модель мира (singleton).

Это класс worldmodule:

       builder.RegisterType<World>().AsSelf()
            .AsImplementedInterfaces()
            .SingleInstance();

        builder.RegisterType<WorldService>().AsImplementedInterfaces();
  

В регионе я хочу иметь тот же экземпляр worldservice. Это класс region module:

 builder.RegisterBuildCallback(c =>
        {
            Task.Run(async () =>
            {
                while (true)
                {
                    var x = c.Resolve<IWorldService>() as WorldService;
                    if (x.RegionWasAssignedToRegionServers == true)
                    {
                     c.Resolve<IRegionService> ().AssignAreaMapToServer();
                        break;
                    }
                    await Task.Delay(200);
                }
            });
        });
  

Комментарии:

1. Выглядит нормально, разрешение c должно сработать.

2. Не могли бы вы подробнее объяснить, что вы пытаетесь сделать? как RegionWasAssignedToRegionServers меняются? что такое AssignAreaMapToServer ? Зачем вам нужен один экземпляр?

3. ну, я решил по-другому. Основная цель этого — дождаться, пока все региональные серверы не будут подключены к мировому серверу. После этого всемирная служба вычислит, какая карта региона будет связана с каким региональным сервером. Здесь, в этом экземпляре, я установлю для RegionWasAssignedToRegionServers флаг true. Вот почему в то время мне был нужен общий экземпляр всемирной службы.