Skip to content

Commit 1aa42c2

Browse files
Merge pull request #9 from KristofferStrube/fix/ijsobjectreference-leaks-in-createasync-methods
Fixed that `CreateAsync` methods in `Blob`, `File`, and `FileReader` leaked `IJSObjectReference`s.
2 parents 8f90013 + 58d06d9 commit 1aa42c2

3 files changed

Lines changed: 6 additions & 6 deletions

File tree

src/KristofferStrube.Blazor.FileAPI/Blob.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public static Blob Create(IJSRuntime jSRuntime, IJSObjectReference jSReference)
4646
/// <returns></returns>
4747
public static async Task<Blob> CreateAsync(IJSRuntime jSRuntime, IList<BlobPart>? blobParts = null, BlobPropertyBag? options = null)
4848
{
49-
IJSObjectReference helper = await jSRuntime.GetHelperAsync();
49+
await using IJSObjectReference helper = await jSRuntime.GetHelperAsync();
5050
object?[]? jsBlobParts = blobParts?.Select<BlobPart, object?>(blobPart => blobPart.Part switch
5151
{
5252
byte[] part => part,
@@ -55,7 +55,7 @@ public static async Task<Blob> CreateAsync(IJSRuntime jSRuntime, IList<BlobPart>
5555
})
5656
.ToArray();
5757
IJSObjectReference jSInstance = await helper.InvokeAsync<IJSObjectReference>("constructBlob", jsBlobParts, options);
58-
return new Blob(jSRuntime, jSInstance, new() { DisposesJSReference = true });
58+
return new(jSRuntime, jSInstance, new() { DisposesJSReference = true });
5959
}
6060

6161
/// <inheritdoc cref="CreateAsync(IJSRuntime, IJSObjectReference, CreationOptions)"/>

src/KristofferStrube.Blazor.FileAPI/File.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class File : Blob, IJSCreatable<File>
4646
/// <returns></returns>
4747
public static async Task<File> CreateAsync(IJSRuntime jSRuntime, IList<BlobPart> fileBits, string fileName, FilePropertyBag? options = null)
4848
{
49-
IJSObjectReference helper = await jSRuntime.GetHelperAsync();
49+
await using IJSObjectReference helper = await jSRuntime.GetHelperAsync();
5050
object?[]? jsFileBits = fileBits.Select(blobPart => blobPart.Part switch
5151
{
5252
byte[] part => part,
@@ -55,7 +55,7 @@ public static async Task<File> CreateAsync(IJSRuntime jSRuntime, IList<BlobPart>
5555
})
5656
.ToArray();
5757
IJSObjectReference jSInstance = await helper.InvokeAsync<IJSObjectReference>("constructFile", jsFileBits, fileName, options);
58-
return new File(jSRuntime, jSInstance, new() { DisposesJSReference = true });
58+
return new(jSRuntime, jSInstance, new() { DisposesJSReference = true });
5959
}
6060

6161
/// <inheritdoc cref="CreateAsync(IJSRuntime, IJSObjectReference, CreationOptions)"/>

src/KristofferStrube.Blazor.FileAPI/FileReader.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class FileReader : EventTarget, IJSCreatable<FileReader>
2626
/// <inheritdoc/>
2727
public static new async Task<FileReader> CreateAsync(IJSRuntime jSRuntime, IJSObjectReference jSReference, CreationOptions options)
2828
{
29-
IJSObjectReference helper = await jSRuntime.GetHelperAsync();
29+
await using IJSObjectReference helper = await jSRuntime.GetHelperAsync();
3030
FileReader fileReader = new(jSRuntime, jSReference, options);
3131
await helper.InvokeVoidAsync("registerEventHandlersAsync", DotNetObjectReference.Create(fileReader), jSReference);
3232
return fileReader;
@@ -39,7 +39,7 @@ public class FileReader : EventTarget, IJSCreatable<FileReader>
3939
/// <returns>A wrapper instance for a <see cref="FileReader"/>.</returns>
4040
public static new async Task<FileReader> CreateAsync(IJSRuntime jSRuntime)
4141
{
42-
IJSObjectReference helper = await jSRuntime.GetHelperAsync();
42+
await using IJSObjectReference helper = await jSRuntime.GetHelperAsync();
4343
IJSObjectReference jSInstance = await helper.InvokeAsync<IJSObjectReference>("constructFileReader");
4444
FileReader fileReader = new(jSRuntime, jSInstance, new() { DisposesJSReference = true });
4545
await helper.InvokeVoidAsync("registerEventHandlersAsync", DotNetObjectReference.Create(fileReader), jSInstance);

0 commit comments

Comments
 (0)