#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. Вот почему в то время мне был нужен общий экземпляр всемирной службы.