start with DI rework
This commit is contained in:
@@ -17,6 +17,8 @@ using MareSynchronos.Export;
|
|||||||
using Dalamud.Data;
|
using Dalamud.Data;
|
||||||
using MareSynchronos.MareConfiguration;
|
using MareSynchronos.MareConfiguration;
|
||||||
using MareSynchronos.Mediator;
|
using MareSynchronos.Mediator;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
|
||||||
namespace MareSynchronos;
|
namespace MareSynchronos;
|
||||||
|
|
||||||
@@ -48,6 +50,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
private readonly GposeUi _gposeUi;
|
private readonly GposeUi _gposeUi;
|
||||||
private readonly ConfigurationService _configurationService;
|
private readonly ConfigurationService _configurationService;
|
||||||
private readonly MareMediator _mediator;
|
private readonly MareMediator _mediator;
|
||||||
|
private readonly ServiceProvider _serviceProvider;
|
||||||
|
|
||||||
|
|
||||||
public Plugin(DalamudPluginInterface pluginInterface, CommandManager commandManager, DataManager gameData,
|
public Plugin(DalamudPluginInterface pluginInterface, CommandManager commandManager, DataManager gameData,
|
||||||
@@ -57,35 +60,52 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
_pluginInterface = pluginInterface;
|
_pluginInterface = pluginInterface;
|
||||||
_pluginInterface.UiBuilder.DisableGposeUiHide = true;
|
_pluginInterface.UiBuilder.DisableGposeUiHide = true;
|
||||||
_commandManager = commandManager;
|
_commandManager = commandManager;
|
||||||
_configurationService = new(_pluginInterface);
|
|
||||||
_mediator = new();
|
|
||||||
|
|
||||||
_localization = new Dalamud.Localization("MareSynchronos.Localization.", "", useEmbedded: true);
|
IServiceCollection collection = new ServiceCollection();
|
||||||
_localization.SetupWithLangCode("en");
|
// inject dalamud stuff
|
||||||
|
collection.AddSingleton(pluginInterface);
|
||||||
|
collection.AddSingleton(commandManager);
|
||||||
|
collection.AddSingleton(gameData);
|
||||||
|
collection.AddSingleton(framework);
|
||||||
|
collection.AddSingleton(objectTable);
|
||||||
|
collection.AddSingleton(clientState);
|
||||||
|
collection.AddSingleton(condition);
|
||||||
|
collection.AddSingleton(chatGui);
|
||||||
|
collection.AddSingleton(new WindowSystem("MareSynchronos"));
|
||||||
|
collection.AddSingleton<FileDialogManager>();
|
||||||
|
|
||||||
_windowSystem = new WindowSystem("MareSynchronos");
|
// add mare related stuff
|
||||||
|
collection.AddSingleton(new Dalamud.Localization("MareSynchronos.Localization.", "", useEmbedded: true));
|
||||||
|
|
||||||
|
collection.AddSingleton<ConfigurationService>();
|
||||||
|
collection.AddSingleton<MareMediator>();
|
||||||
|
collection.AddSingleton<DalamudUtil>();
|
||||||
|
collection.AddSingleton<IpcManager>();
|
||||||
|
collection.AddSingleton<FileCacheManager>();
|
||||||
|
collection.AddSingleton<ServerConfigurationManager>();
|
||||||
|
collection.AddSingleton<PairManager>();
|
||||||
|
collection.AddSingleton<ApiController>();
|
||||||
|
collection.AddSingleton<PeriodicFileScanner>();
|
||||||
|
collection.AddSingleton<FileReplacementFactory>();
|
||||||
|
collection.AddSingleton<MareCharaFileManager>();
|
||||||
|
|
||||||
|
collection.AddSingleton<UiShared>();
|
||||||
|
collection.AddSingleton<SettingsUi>();
|
||||||
|
collection.AddSingleton<CompactUi>();
|
||||||
|
collection.AddSingleton<GposeUi>();
|
||||||
|
collection.AddSingleton<IntroUi>();
|
||||||
|
|
||||||
|
collection.AddTransient<TransientResourceManager>();
|
||||||
|
collection.AddTransient<CharacterDataFactory>();
|
||||||
|
collection.AddTransient<PlayerManager>();
|
||||||
|
collection.AddTransient<OnlinePlayerManager>();
|
||||||
|
|
||||||
|
_serviceProvider = collection.BuildServiceProvider(new ServiceProviderOptions() { ValidateOnBuild = true, ValidateScopes = true });
|
||||||
|
|
||||||
|
_serviceProvider.GetRequiredService<Dalamud.Localization>().SetupWithLangCode("en");
|
||||||
|
|
||||||
// those can be initialized outside of game login
|
// those can be initialized outside of game login
|
||||||
_dalamudUtil = new DalamudUtil(clientState, objectTable, framework, condition, chatGui, gameData);
|
|
||||||
|
|
||||||
_ipcManager = new IpcManager(_pluginInterface, _dalamudUtil);
|
|
||||||
_fileDialogManager = new FileDialogManager();
|
|
||||||
_fileCacheManager = new FileCacheManager(_ipcManager, _configurationService);
|
|
||||||
_serverConfigurationManager = new ServerConfigurationManager(_configurationService, _dalamudUtil);
|
|
||||||
_pairManager = new PairManager(new CachedPlayerFactory(_ipcManager, _dalamudUtil, _fileCacheManager), _dalamudUtil,
|
|
||||||
new PairFactory(_configurationService, _serverConfigurationManager), _pluginInterface.UiBuilder, _configurationService);
|
|
||||||
_apiController = new ApiController(_configurationService, _dalamudUtil, _fileCacheManager, _pairManager, _serverConfigurationManager);
|
|
||||||
_periodicFileScanner = new PeriodicFileScanner(_ipcManager, _configurationService, _fileCacheManager, _apiController, _dalamudUtil);
|
|
||||||
_fileReplacementFactory = new FileReplacementFactory(_fileCacheManager, _ipcManager);
|
|
||||||
_mareCharaFileManager = new(_fileCacheManager, _ipcManager, _configurationService, _dalamudUtil);
|
|
||||||
|
|
||||||
_uiSharedComponent =
|
|
||||||
new UiShared(_ipcManager, _apiController, _periodicFileScanner, _fileDialogManager, _configurationService, _dalamudUtil, _pluginInterface, _localization, _serverConfigurationManager);
|
|
||||||
_settingsUi = new SettingsUi(_windowSystem, _uiSharedComponent, _configurationService, _mareCharaFileManager, _pairManager, _serverConfigurationManager);
|
|
||||||
_compactUi = new CompactUi(_windowSystem, _uiSharedComponent, _configurationService, _apiController, _pairManager, _serverConfigurationManager);
|
|
||||||
_gposeUi = new GposeUi(_windowSystem, _mareCharaFileManager, _dalamudUtil, _fileDialogManager, _configurationService);
|
|
||||||
|
|
||||||
_introUi = new IntroUi(_windowSystem, _uiSharedComponent, _configurationService, _periodicFileScanner, _serverConfigurationManager);
|
|
||||||
_settingsUi.SwitchToIntroUi += () =>
|
_settingsUi.SwitchToIntroUi += () =>
|
||||||
{
|
{
|
||||||
_introUi.IsOpen = true;
|
_introUi.IsOpen = true;
|
||||||
@@ -119,6 +139,10 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + Name);
|
Logger.Verbose("Disposing " + Name);
|
||||||
|
|
||||||
|
var services = _serviceProvider.GetServices<IDisposable>().ToList();
|
||||||
|
services.ForEach(c => c.Dispose());
|
||||||
|
|
||||||
_apiController?.Dispose();
|
_apiController?.Dispose();
|
||||||
|
|
||||||
_commandManager.RemoveHandler(_commandName);
|
_commandManager.RemoveHandler(_commandName);
|
||||||
@@ -200,13 +224,10 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Logger.Debug("Launching Managers");
|
Logger.Debug("Launching Managers");
|
||||||
_transientResourceManager = new TransientResourceManager(_ipcManager, _configurationService, _dalamudUtil, _fileReplacementFactory);
|
|
||||||
var characterCacheFactory =
|
_transientResourceManager = _serviceProvider.GetRequiredService<TransientResourceManager>();
|
||||||
new CharacterDataFactory(_dalamudUtil, _ipcManager, _transientResourceManager, _fileReplacementFactory);
|
_playerManager = _serviceProvider.GetRequiredService<PlayerManager>();
|
||||||
_playerManager = new PlayerManager(_apiController, _ipcManager,
|
_characterCacheManager = _serviceProvider.GetRequiredService<OnlinePlayerManager>();
|
||||||
characterCacheFactory, _dalamudUtil, _transientResourceManager, _periodicFileScanner, _settingsUi);
|
|
||||||
_characterCacheManager = new OnlinePlayerManager(_apiController,
|
|
||||||
_dalamudUtil, _playerManager, _fileCacheManager, _pairManager);
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user