75 lines
2.2 KiB
C#
75 lines
2.2 KiB
C#
using FluidExplorer.Services.FileSystem;
|
|
using FluidExplorer.Services.Icons;
|
|
using FluidExplorer.Services.Operations;
|
|
using FluidExplorer.Services.Search;
|
|
using FluidExplorer.ViewModels;
|
|
using Microsoft.UI.Dispatching;
|
|
|
|
namespace FluidExplorer.Services;
|
|
|
|
/// <summary>组合根:所有服务在这里创建、装配,并交给视图模型。</summary>
|
|
public sealed class AppServices
|
|
{
|
|
public AppServices(DispatcherQueue ui)
|
|
{
|
|
Ui = ui;
|
|
Settings = AppSettings.Load();
|
|
FileSystem = new FastFileSystemService();
|
|
Search = new SearchService(FileSystem);
|
|
Icons = CreateIconService(ui);
|
|
Operations = CreateOperationService();
|
|
Main = new MainViewModel(FileSystem, Search, Operations, Icons, Settings, ui);
|
|
}
|
|
|
|
public DispatcherQueue Ui { get; }
|
|
public AppSettings Settings { get; }
|
|
public IFileSystemService FileSystem { get; }
|
|
public SearchService Search { get; }
|
|
public IIconService Icons { get; }
|
|
public IFileOperationService Operations { get; }
|
|
public MainViewModel Main { get; }
|
|
|
|
/// <summary>接入 Windows 外壳原版图标(imageres.dll / IShellItemImageFactory)。</summary>
|
|
private static IIconService CreateIconService(DispatcherQueue ui)
|
|
{
|
|
try
|
|
{
|
|
return new ShellIconService(ui);
|
|
}
|
|
catch
|
|
{
|
|
return new PlaceholderIconService();
|
|
}
|
|
}
|
|
|
|
/// <summary>接入文件操作队列引擎。</summary>
|
|
private static IFileOperationService CreateOperationService()
|
|
{
|
|
try
|
|
{
|
|
return new FileOperationService();
|
|
}
|
|
catch
|
|
{
|
|
return new PlaceholderOperationService();
|
|
}
|
|
}
|
|
|
|
/// <summary>接入 NTFS USN/MFT 索引(Everything 式极速搜索)。</summary>
|
|
public void WireSearchIndex()
|
|
{
|
|
Search.IndexFactory = volumeRoot =>
|
|
{
|
|
try
|
|
{
|
|
return new FluidExplorer.Services.Search.Usn.UsnVolumeIndex(volumeRoot);
|
|
}
|
|
catch
|
|
{
|
|
// 非 NTFS 卷等异常情况:该卷不建索引,搜索自动退化为实时扫描
|
|
return null;
|
|
}
|
|
};
|
|
}
|
|
}
|