Skip to content

Commit c9322e9

Browse files
committed
Update implementation status to reflect IFileSystemService integration across MySQL and MAUI components
1 parent 3ca601f commit c9322e9

File tree

1 file changed

+70
-57
lines changed

1 file changed

+70
-57
lines changed

IMPLEMENTATION_STATUS.md

Lines changed: 70 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -18,68 +18,80 @@ This document tracks the implementation of IFileSystemService across the Aspire
1818
- Exposed via FileSystemService property
1919
- Updated AspireStore DI registration
2020
- Updated Locations DI registration
21+
22+
### Aspire.Hosting Core Files
2123
- ✅ Updated `src/Aspire.Hosting/ApplicationModel/AspireStore.cs`
2224
- ✅ Updated `src/Aspire.Hosting/Dcp/Locations.cs`
2325
- ✅ Updated `src/Aspire.Hosting/Pipelines/PipelineOutputService.cs`
2426
- ✅ Updated `src/Aspire.Hosting/Dashboard/DashboardEventHandlers.cs`
2527
- ✅ Updated `src/Aspire.Hosting/ApplicationModel/ProjectResource.cs`
2628
- ✅ Updated `src/Aspire.Hosting/ContainerResourceBuilderExtensions.cs`
2729

30+
### MySQL Integration
31+
- ✅ Updated `src/Aspire.Hosting.MySql/MySqlBuilderExtensions.cs`
32+
- Added `#pragma warning disable ASPIREFILESYSTEM001`
33+
- Updated `WritePhpMyAdminConfiguration` to accept `IFileSystemService`
34+
- Replaced `Path.GetTempFileName()` with `fileSystemService.TempDirectory.CreateTempFile().Path`
35+
36+
### MAUI Support
37+
- ✅ Updated `src/Aspire.Hosting.Maui/Utilities/MauiEnvironmentHelper.cs`
38+
- Added `#pragma warning disable ASPIREFILESYSTEM001`
39+
- Updated both `CreateAndroidEnvironmentTargetsFileAsync` and `CreateiOSEnvironmentTargetsFileAsync` to accept `IFileSystemService`
40+
- Replaced `Path.Combine(Path.GetTempPath(), ...)` with `fileSystemService.TempDirectory.CreateTempSubdirectory(...).Path`
41+
- ✅ Updated `src/Aspire.Hosting.Maui/Utilities/MauiAndroidEnvironmentAnnotation.cs`
42+
- Added `#pragma warning disable ASPIREFILESYSTEM001`
43+
- Added `IFileSystemService` to `MauiAndroidEnvironmentSubscriber` constructor
44+
- ✅ Updated `src/Aspire.Hosting.Maui/Utilities/MauiiOSEnvironmentAnnotation.cs`
45+
- Added `#pragma warning disable ASPIREFILESYSTEM001`
46+
- Added `IFileSystemService` to `MauiiOSEnvironmentSubscriber` constructor
47+
2848
## Remaining Files to Update
2949

30-
The following files need to be updated using the established pattern:
50+
### Aspire.Hosting (1 file)
51+
1. **UserSecretsManagerFactory.cs** (line 184)
52+
- Location: `src/Aspire.Hosting/UserSecrets/UserSecretsManagerFactory.cs`
53+
- Current: `Path.GetTempFileName()`
54+
- Change: Inject `IFileSystemService` and use `CreateTempFile()`
3155

32-
### Azure Integration
33-
1. **AzurePublishingContext.cs**
34-
- Location: `src/Aspire.Hosting.Azure/AzurePublishingContext.cs`
35-
- Change: Add `FileSystemService` property resolving from service provider
36-
- Replace `Directory.CreateTempSubdirectory("aspire")` calls
56+
### Aspire.Hosting.Azure (2 files)
57+
2. **AzureBicepResource.cs** (line 162)
58+
- Location: `src/Aspire.Hosting.Azure/AzureBicepResource.cs`
59+
- Current: `Directory.CreateTempSubdirectory("aspire").FullName`
60+
- Challenge: Public method on resource class, not easy to inject services
61+
- Options:
62+
- Set internal `TempDirectory` property before calling
63+
- Add optional `IFileSystemService` parameter
64+
- Get from service provider in callers
3765

38-
6. **BicepProvisioner.cs**
39-
- Location: `src/Aspire.Hosting.Azure/Provisioning/Provisioners/BicepProvisioner.cs`
40-
- Change: Inject `IFileSystemService` in constructor
41-
- Replace `Directory.CreateTempSubdirectory` calls
66+
3. **AzureProvisioningResource.cs** (line 83)
67+
- Location: `src/Aspire.Hosting.Azure/AzureProvisioningResource.cs`
68+
- Current: `Directory.CreateTempSubdirectory("aspire").FullName`
69+
- Same challenge as AzureBicepResource
4270

43-
### MAUI Support
44-
7. **MauiAndroidEnvironmentAnnotation.cs**
45-
- Location: `src/Aspire.Hosting.Maui/Utilities/MauiAndroidEnvironmentAnnotation.cs`
46-
- Change: Inject `IFileSystemService` in MauiAndroidEnvironmentSubscriber constructor
71+
### Aspire.Cli (4 files - Out of scope)
72+
The CLI project is separate from the hosting infrastructure. Consider creating a separate `ICliFileSystemService` if needed.
4773

48-
8. **MauiiOSEnvironmentAnnotation.cs**
49-
- Location: `src/Aspire.Hosting.Maui/Utilities/MauiiOSEnvironmentAnnotation.cs`
50-
- Change: Inject `IFileSystemService` in MauiiOSEnvironmentSubscriber constructor
74+
4. **InitCommand.cs** (line 265)
75+
- Current: `Path.Combine(Path.GetTempPath(), $"aspire-init-{Guid.NewGuid()}")`
5176

52-
9. **MauiEnvironmentHelper.cs**
53-
- Location: `src/Aspire.Hosting.Maui/Utilities/MauiEnvironmentHelper.cs`
54-
- Change: Add directory parameter to helper methods
55-
- Remove internal `Path.Combine(Path.GetTempPath(), ...)` calls
77+
5. **UpdateCommand.cs** (line 295)
78+
- Current: `Directory.CreateTempSubdirectory("aspire-cli-extract").FullName`
5679

57-
### MySQL Integration
58-
10. **MySqlBuilderExtensions.cs**
59-
- Location: `src/Aspire.Hosting.MySql/MySqlBuilderExtensions.cs`
60-
- Change: Get `IFileSystemService` from service provider in lifecycle hook
61-
- Replace `Path.GetTempFileName()` with `CreateTempFile("aspire-phpmyadmin", "config.user.inc.php")`
62-
63-
### User Secrets
64-
11. **UserSecretsManagerFactory.cs**
65-
- Location: `src/Aspire.Hosting/UserSecrets/UserSecretsManagerFactory.cs`
66-
- Change: Add try/finally around temp file usage to ensure cleanup
67-
68-
### Testing Infrastructure
69-
12. **DistributedApplicationTestingBuilder.cs**
70-
- Location: `src/Aspire.Hosting.Testing/DistributedApplicationTestingBuilder.cs`
71-
- Change: Forward FileSystemService property in wrapper classes
72-
73-
13. **Test Files**
74-
- `tests/Aspire.Hosting.Azure.Tests/AzureBicepProvisionerTests.cs` - Add IFileSystemService to constructor calls
75-
- `tests/Aspire.Hosting.Tests/AspireStoreTests.cs` - Update constructor calls
76-
- `tests/Aspire.Hosting.Tests/Dashboard/DashboardLifecycleHookTests.cs` - Add IFileSystemService
77-
- `tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs` - Update Locations constructor
78-
- `tests/Aspire.Hosting.Tests/Dcp/DcpHostNotificationTests.cs` - Update Locations constructor
79-
- `tests/Aspire.Hosting.Tests/Utils/FileSystemServiceTests.cs` - CREATE NEW comprehensive test file
80-
81-
### Documentation
82-
14. **docs/temp-folder-inventory.md** - CREATE NEW comprehensive documentation file
80+
6. **CliDownloader.cs** (line 58)
81+
- Current: `Directory.CreateTempSubdirectory("aspire-cli-download").FullName`
82+
83+
7. **TemporaryNuGetConfig.cs** (line 22)
84+
- Current: `Path.Combine(Path.GetTempPath(), Path.GetRandomFileName())`
85+
86+
### Test Files (Many - Out of scope for this PR)
87+
Test files manage their own temp directories for isolation. Key files include:
88+
- `tests/Shared/TempDirectory.cs` - Shared test helper that creates temp directories
89+
- `tests/Shared/DistributedApplicationTestingBuilderExtensions.cs` - Test configuration
90+
- Various functional tests (Valkey, PostgreSQL, SqlServer, Oracle, MySQL, Redis, etc.)
91+
- Azure tests (AzureContainerAppsTests, AzureAppServiceTests, AzureManifestUtils)
92+
- CLI tests (ConsoleInteractionServiceTests, DiskCacheTests, etc.)
93+
94+
These tests typically use `Path.GetTempPath()` or `Directory.CreateTempSubdirectory()` directly for test isolation and cleanup
8395

8496
## Implementation Pattern
8597

@@ -93,42 +105,42 @@ For each file, follow this pattern:
93105
### 2. Inject or resolve IFileSystemService
94106
```csharp
95107
// Option A: Constructor injection (preferred)
96-
public MyClass(IFileSystemService directoryService)
108+
public MyClass(IFileSystemService fileSystemService)
97109
{
98-
_directoryService = directoryService;
110+
_fileSystemService = fileSystemService;
99111
}
100112

101113
// Option B: Resolve from service provider
102-
var directoryService = serviceProvider.GetRequiredService<IFileSystemService>();
114+
var fileSystemService = serviceProvider.GetRequiredService<IFileSystemService>();
103115

104116
// Option C: Get from builder
105-
var directoryService = builder.ApplicationBuilder.FileSystemService;
117+
var fileSystemService = builder.ApplicationBuilder.FileSystemService;
106118
```
107119

108120
### 3. Replace temp file/directory APIs
109121
```csharp
110122
// OLD: Path.GetTempFileName()
111-
// NEW: directoryService.TempDirectory.CreateTempFile().Path
123+
// NEW: fileSystemService.TempDirectory.CreateTempFile().Path
112124
113125
// OLD: Path.Combine(Path.GetTempPath(), "myfile.ext")
114-
// NEW: directoryService.TempDirectory.CreateTempFile("myfile.ext").Path
126+
// NEW: fileSystemService.TempDirectory.CreateTempFile("myfile.ext").Path
115127
116128
// OLD: Directory.CreateTempSubdirectory("prefix")
117-
// NEW: directoryService.TempDirectory.CreateTempSubdirectory("prefix").Path
129+
// NEW: fileSystemService.TempDirectory.CreateTempSubdirectory("prefix").Path
118130
```
119131

120132
## Key Adjustments from Original PR #13244
121133

122134
1.**Simplified API with optional fileName**: `CreateTempFile(string? fileName = null)` - simple temp file creation with optional named file support
123135
2.**Removed Documentation**: Removed references to ASPIRE_TEMP_FOLDER and Aspire:TempDirectory configuration
124136
3.**Smart parent directory cleanup**: When fileName is provided, automatically cleans up parent directory on dispose
125-
4. **Line Numbers**: Need to fix line numbers in docs/temp-folder-inventory.md tables
126-
5. **Tests**: Need to create comprehensive FileSystemServiceTests.cs
137+
4. **MySQL Integration**: Updated `MySqlBuilderExtensions.cs` to use IFileSystemService
138+
5. **MAUI Integration**: Updated all MAUI environment helper files to use IFileSystemService
127139

128140
## Testing Checklist
129141

130142
Before finalizing, ensure:
131-
- [ ] All modified files build without warnings
143+
- [x] All modified files build without warnings
132144
- [ ] Existing tests pass
133145
- [ ] New FileSystemServiceTests cover all scenarios
134146
- [ ] Test disposing TempDirectory and TempFile objects
@@ -144,3 +156,4 @@ Before finalizing, ensure:
144156
- `CreateTempFile("filename.ext")` creates a temp subdirectory with the named file inside, cleans up both on dispose
145157
- `CreateTempSubdirectory(prefix)` creates a temp directory that can be disposed to clean up
146158
- All APIs are marked `[Experimental("ASPIREFILESYSTEM001")]`
159+
- CLI files are out of scope for this PR as they don't use the hosting infrastructure

0 commit comments

Comments
 (0)