Prepare to move `CreateInferred`

Part of: #11907
This commit is contained in:
Ryan Nowak 2019-07-08 20:18:23 -07:00 committed by Ryan Nowak
parent a296e9ad74
commit c41d40c56b
2 changed files with 40 additions and 0 deletions

View File

@ -419,6 +419,8 @@ namespace Microsoft.AspNetCore.Components
}
public static partial class RuntimeHelpers
{
public static Microsoft.AspNetCore.Components.EventCallback<T> CreateInferredEventCallback<T>(object receiver, System.Action<T> callback, T value) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback<T> CreateInferredEventCallback<T>(object receiver, System.Func<T, System.Threading.Tasks.Task> callback, T value) { throw null; }
public static T TypeCheck<T>(T value) { throw null; }
}
public partial class UIChangeEventArgs : Microsoft.AspNetCore.Components.UIEventArgs

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Threading.Tasks;
namespace Microsoft.AspNetCore.Components
{
@ -17,6 +18,43 @@ namespace Microsoft.AspNetCore.Components
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
//
// This method is used to create an expression binding site with a compile-time known type. This helps with providing
// good error messages, as well as proper method-group-to-delegate conversion when assigning component parameters.
public static T TypeCheck<T>(T value) => value;
/// <summary>
/// Not intended for use by application code.
/// </summary>
/// <param name="receiver"></param>
/// <param name="callback"></param>
/// <param name="value"></param>
/// <returns></returns>
//
// This method is used with `@bind-Value` for components. When a component has a generic type, it's
// really messy to write to try and write the parameter type for ValueChanged - because it can contain generic
// type parameters. We're using a trick of type inference to generate the proper typing for the delegate
// so that method-group-to-delegate conversion works.
public static EventCallback<T> CreateInferredEventCallback<T>(object receiver, Action<T> callback, T value)
{
return EventCallback.Factory.Create<T>(receiver, callback);
}
/// <summary>
/// Not intended for use by application code.
/// </summary>
/// <param name="receiver"></param>
/// <param name="callback"></param>
/// <param name="value"></param>
/// <returns></returns>
//
// This method is used with `@bind-Value` for components. When a component has a generic type, it's
// really messy to write to try and write the parameter type for ValueChanged - because it can contain generic
// type parameters. We're using a trick of type inference to generate the proper typing for the delegate
// so that method-group-to-delegate conversion works.
public static EventCallback<T> CreateInferredEventCallback<T>(object receiver, Func<T, Task> callback, T value)
{
return EventCallback.Factory.Create<T>(receiver, callback);
}
}
}