Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add NRT to Csla-Core library #4528

Open
wants to merge 61 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
3dae372
Nullability for Csla.Configuration.* namespace added
StefanOssendorf Jul 9, 2024
4729dc0
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Jul 12, 2024
97b15fe
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Jul 13, 2024
6a570c1
Csla.Core.FieldManager namespace nullable aware
StefanOssendorf Jul 13, 2024
37d9eaa
Csla.Core.LoadManager namespace nullable aware
StefanOssendorf Jul 13, 2024
d4f3d47
Csla.Core.TypeConverters namespace nullable aware
StefanOssendorf Jul 13, 2024
f1f970e
Csla.Core nullability added till file IUseFieldManager.cs (still WIP)
StefanOssendorf Jul 14, 2024
07789fe
Csla.Core namespace nullable aware (finished)
StefanOssendorf Jul 15, 2024
4dc2e2b
Csla.Data namespace nullable aware
StefanOssendorf Jul 15, 2024
ce36d30
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Jul 30, 2024
bb6f913
Csla.DataPortalClient namespace nullable aware
StefanOssendorf Jul 31, 2024
1e67fd2
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Aug 11, 2024
b105add
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Aug 16, 2024
6a99b64
Csla.Reflection namespace nullable aware
StefanOssendorf Aug 17, 2024
8af1911
Csla.Rules namspace nullable aware
StefanOssendorf Aug 22, 2024
57d03b9
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Aug 22, 2024
e7cfc01
Csla.Runtime namespace nullable aware
StefanOssendorf Aug 31, 2024
68d9df1
Csla.Security namespace nullable aware (except types which may be dead)
StefanOssendorf Aug 31, 2024
bd11653
Csla.Serialization namespace nullable aware (work in progress)
StefanOssendorf Aug 31, 2024
df615b5
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Sep 6, 2024
33f5569
NRT errors fixed
StefanOssendorf Sep 7, 2024
98b59e9
Add breaking change log for CslaModelBinder
StefanOssendorf Sep 7, 2024
806eb0c
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Sep 12, 2024
cdb27a4
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Sep 28, 2024
a5ebf4d
Csla.Serialization namespace nullable aware (finished)
StefanOssendorf Oct 7, 2024
956eec2
Nullable errors fixed in already migrated projects
StefanOssendorf Oct 7, 2024
2ddb7ff
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Oct 7, 2024
12ac4a0
Csla.Server namespace nullable aware
StefanOssendorf Oct 23, 2024
995490a
Nullable errors fixed in already migrated projects
StefanOssendorf Oct 23, 2024
333daae
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Oct 23, 2024
a042511
Fixes error of main merge
StefanOssendorf Oct 23, 2024
6c84c52
Csla.State namespace nullable aware
StefanOssendorf Oct 23, 2024
49777c8
Unnecessary #nullabe enables removed
StefanOssendorf Oct 23, 2024
f60ec42
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Oct 25, 2024
f2fb16b
Csla.Threading nullable aware
StefanOssendorf Oct 25, 2024
7ebe95b
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Oct 29, 2024
4da5f87
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Nov 9, 2024
29533ba
Csla nullable aware
StefanOssendorf Nov 17, 2024
262604d
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Nov 17, 2024
849de38
NRT errors fixed
StefanOssendorf Dec 8, 2024
0ececf7
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Jan 2, 2025
2c58a5b
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Jan 7, 2025
e7fb0a5
Make IContextManager.SetUser IPrincipal non nullable
StefanOssendorf Jan 7, 2025
31232ca
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Jan 25, 2025
d662e48
Fixing broken tests due to NRT addition
StefanOssendorf Jan 26, 2025
a523a59
DataPortalResponse changed to MobileObject as base class
StefanOssendorf Feb 2, 2025
2bd2470
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Feb 7, 2025
7238041
More tests fixed
StefanOssendorf Feb 11, 2025
d56b047
Streamline DynamicMemberHandle usage
StefanOssendorf Feb 12, 2025
55b0745
#if NET8 removed
StefanOssendorf Feb 13, 2025
306cf2b
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Feb 17, 2025
985c27a
More fixes
StefanOssendorf Feb 17, 2025
9d7da31
Fix last broken tests
StefanOssendorf Feb 17, 2025
4e09c07
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Feb 17, 2025
409ba99
#if NET8 removed where possible
StefanOssendorf Feb 17, 2025
fb204a6
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Feb 17, 2025
eaad495
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Feb 18, 2025
769f4eb
Fix tests
StefanOssendorf Feb 18, 2025
bd9d6d4
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Feb 18, 2025
5f67ade
Add missing AOT annotations
StefanOssendorf Feb 22, 2025
9df3ea5
Merge branch 'main' into dev/1233-nullable-Csla-core-project
StefanOssendorf Feb 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,7 @@ public IPrincipal GetUser()
return CurrentPrincipal;
}

/// <summary>
/// Not supported in Blazor.
/// </summary>
/// <param name="principal">Principal object.</param>
/// <inheritdoc />
public virtual void SetUser(IPrincipal principal)
{
ArgumentNullException.ThrowIfNull(principal);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,11 @@ public IPrincipal GetUser()
return CurrentPrincipal;
}

/// <summary>
/// Attempts to set the current principal on the registered
/// IHostEnvironmentAuthenticationStateProvider service.
/// </summary>
/// <param name="principal">Principal object.</param>
/// <inheritdoc />
public virtual void SetUser(IPrincipal principal)
{
ArgumentNullException.ThrowIfNull(principal);

if (!ReferenceEquals(CurrentPrincipal, principal))
{
if (ActiveCircuitState.CircuitExists)
Expand All @@ -151,7 +149,11 @@ public virtual void SetUser(IPrincipal principal)
}
else if (HttpContext is not null)
{
HttpContext.User = (ClaimsPrincipal)principal;
if (principal is not ClaimsPrincipal claimsPrincipal)
{
throw new ArgumentException("typeof(principal) != ClaimsPrincipal");
}
HttpContext.User = claimsPrincipal;
}
else
{
Expand Down
11 changes: 8 additions & 3 deletions Source/Csla.AspNetCore/Blazor/State/StateController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
using Csla.Security;
using Csla.Blazor.State.Messages;
using Csla.Serialization;
using System.Runtime.Serialization;
using Csla.Properties;

namespace Csla.AspNetCore.Blazor.State
{
Expand Down Expand Up @@ -45,8 +47,7 @@ public virtual StateResult Get(long lastTouched)
}
else
{
var message = (SessionMessage)applicationContext.CreateInstanceDI(typeof(SessionMessage));
message.Session = session;
var message = applicationContext.CreateInstanceDI<SessionMessage>(session);
if (FlowUserIdentityToWebAssembly)
{
message.Principal = applicationContext.Principal;
Expand All @@ -73,7 +74,11 @@ public virtual void Put(byte[] updatedSessionData)
{
Position = 0
};
var session = (Session)formatter.Deserialize(buffer);
if (formatter.Deserialize(buffer) is not Session session)
{
throw new SerializationException(string.Format(Resources.DeserializationFailedDueToWrongData, nameof(Session)));
}

sessionManager.UpdateSession(session);
}
}
Expand Down
4 changes: 4 additions & 0 deletions Source/Csla.AspNetCore/ConfigurationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Microsoft.Extensions.DependencyInjection;
using Csla.Core;
using Csla.AspNetCore;
using Csla.Web.Mvc;

namespace Csla.Configuration
{
Expand Down Expand Up @@ -45,6 +46,9 @@ public static CslaOptions AddAspNetCore(this CslaOptions config, Action<AspNetCo
#if NET8_0_OR_GREATER
config.Services.AddScoped<ActiveCircuitState>();
config.Services.AddScoped(typeof(CircuitHandler), typeof(ActiveCircuitHandler));
#endif
#if NETSTANDARD2_0 || NET8_0_OR_GREATER
config.Services.AddMvcCore(opt => opt.ModelBinderProviders.Insert(0, new CslaModelBinderProvider()));
#endif
config.Services.AddScoped(typeof(IContextManager), typeof(ApplicationContextManagerHttpContext));
return config;
Expand Down
3 changes: 2 additions & 1 deletion Source/Csla.AspNetCore/Mvc/TagHelpers/CslaErrorsTagHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
// </copyright>
// <summary>Razor tag helper</summary>
//-----------------------------------------------------------------------
using Csla.Properties;
using Csla.Rules;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
Expand Down Expand Up @@ -39,7 +40,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
var propertyName = parts[parts.Length - 1];
object source = model;
for (int i = 0; i < parts.Length - 1; i++)
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]);
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]) ?? throw new InvalidOperationException(string.Format(Resources.TagHelperPropertyInPathHasNullValue, parts[i], CslaErrorsFor.Name));
var result = string.Empty;
if (source is Core.BusinessBase obj)
result = obj.BrokenRulesCollection.ToString(",", RuleSeverity.Error, propertyName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
// </copyright>
// <summary>Razor tag helper</summary>
//-----------------------------------------------------------------------
using Csla.Properties;
using Csla.Rules;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
Expand Down Expand Up @@ -39,7 +40,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
var propertyName = parts[parts.Length - 1];
object source = model;
for (int i = 0; i < parts.Length - 1; i++)
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]);
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]) ?? throw new InvalidOperationException(string.Format(Resources.TagHelperPropertyInPathHasNullValue, parts[i], CslaInformationFor.Name));
var result = string.Empty;
if (source is Core.BusinessBase obj)
result = obj.BrokenRulesCollection.ToString(",", RuleSeverity.Information, propertyName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
// </copyright>
// <summary>Razor tag helper</summary>
//-----------------------------------------------------------------------
using Csla.Properties;
using Csla.Rules;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
Expand Down Expand Up @@ -39,7 +40,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
var propertyName = parts[parts.Length - 1];
object source = model;
for (int i = 0; i < parts.Length - 1; i++)
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]);
source = Reflection.MethodCaller.CallPropertyGetter(source, parts[i]) ?? throw new InvalidOperationException(string.Format(Resources.TagHelperPropertyInPathHasNullValue, parts[i], CslaWarningsFor.Name));
var result = string.Empty;
if (source is Core.BusinessBase obj)
result = obj.BrokenRulesCollection.ToString(",", RuleSeverity.Warning, propertyName);
Expand Down
5 changes: 2 additions & 3 deletions Source/Csla.Blazor.WebAssembly.Tests/SessionManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,9 @@ public void Initialize()
var provider = services.BuildServiceProvider();
var _applicationContext = provider.GetRequiredService<ApplicationContext>();

_sessionValue = new SessionMessage
_sessionValue = new SessionMessage([])
{
Principal = new ClaimsPrincipal() { },
Session = []
Principal = new ClaimsPrincipal()
};

_sessionManager = new SessionManager(_applicationContext, GetHttpClient(_sessionValue, _applicationContext), new BlazorWebAssemblyConfigurationOptions { SyncContextWithServer = true });
Expand Down
2 changes: 1 addition & 1 deletion Source/Csla.Channels.Grpc/Csla.Channels.Grpc.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\Directory.Package.props" />

<PropertyGroup>
Expand Down
74 changes: 41 additions & 33 deletions Source/Csla.Channels.Grpc/GrpcPortal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
// <summary>Exposes server-side DataPortal functionality</summary>
//-----------------------------------------------------------------------

using System.Runtime.Serialization;
using System.Security.Principal;
using Csla.Core;
using Csla.Properties;
using Csla.Serialization;
using Csla.Serialization.Mobile;
using Csla.Server;
Expand Down Expand Up @@ -109,21 +111,19 @@ protected virtual async Task<ResponseMessage> RouteMessage(string operation, str

private async Task<ResponseMessage> InvokePortal(string operation, ByteString requestData)
{
var result = _applicationContext.CreateInstanceDI<DataPortalResponse>();
DataPortalErrorInfo? errorData = null;
var result = new DataPortalResponse();
try
{
var request = _applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(requestData.ToByteArray());
result = await CallPortal(operation, request);
var request = Deserialize<object>(requestData.ToByteArray());
var callResult = await CallPortal(operation, request);
result.ObjectData = callResult.ObjectData;
}
catch (Exception ex)
{
errorData = _applicationContext.CreateInstanceDI<DataPortalErrorInfo>(ex);
result.ErrorData = _applicationContext.CreateInstanceDI<DataPortalErrorInfo>(ex);
}
var portalResult = _applicationContext.CreateInstanceDI<DataPortalResponse>();
portalResult.ErrorData = errorData;
portalResult.ObjectData = result.ObjectData;
var buffer = _applicationContext.GetRequiredService<ISerializationFormatter>().Serialize(portalResult);

var buffer = _applicationContext.GetRequiredService<ISerializationFormatter>().Serialize(result);
return new ResponseMessage { Body = ByteString.CopyFrom(buffer) };
}

Expand All @@ -149,25 +149,25 @@ public async Task<DataPortalResponse> Create(CriteriaRequest request)
if (request is null)
throw new ArgumentNullException(nameof(request));

var result = _applicationContext.CreateInstanceDI<DataPortalResponse>();
var result = new DataPortalResponse();
try
{
request = ConvertRequest(request);

// unpack criteria data into object
object? criteria = GetCriteria(_applicationContext, request.CriteriaData);
object criteria = GetCriteria(_applicationContext, request.CriteriaData);
if (criteria is DataPortalClient.PrimitiveCriteria primitiveCriteria)
{
criteria = primitiveCriteria.Value;
}

var objectType = Reflection.MethodCaller.GetType(AssemblyNameTranslator.GetAssemblyQualifiedName(request.TypeName), true);
var objectType = Reflection.MethodCaller.GetType(AssemblyNameTranslator.GetAssemblyQualifiedName(request.TypeName));
var context = new DataPortalContext(
_applicationContext, (IPrincipal)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.Principal),
_applicationContext, Deserialize<IPrincipal>(request.Principal),
true,
request.ClientCulture,
request.ClientUICulture,
(IContextDictionary)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.ClientContext));
Deserialize<IContextDictionary>(request.ClientContext));

var dpr = await dataPortalServer.Create(objectType, criteria, context, true);

Expand Down Expand Up @@ -197,25 +197,25 @@ public async Task<DataPortalResponse> Fetch(CriteriaRequest request)
if (request is null)
throw new ArgumentNullException(nameof(request));

var result = _applicationContext.CreateInstanceDI<DataPortalResponse>();
var result = new DataPortalResponse();
try
{
request = ConvertRequest(request);

// unpack criteria data into object
object? criteria = GetCriteria(_applicationContext, request.CriteriaData);
object criteria = GetCriteria(_applicationContext, request.CriteriaData);
if (criteria is DataPortalClient.PrimitiveCriteria primitiveCriteria)
{
criteria = primitiveCriteria.Value;
}

var objectType = Reflection.MethodCaller.GetType(AssemblyNameTranslator.GetAssemblyQualifiedName(request.TypeName), true);
var objectType = Reflection.MethodCaller.GetType(AssemblyNameTranslator.GetAssemblyQualifiedName(request.TypeName));
var context = new DataPortalContext(
_applicationContext, (IPrincipal)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.Principal),
_applicationContext, Deserialize<IPrincipal>(request.Principal),
true,
request.ClientCulture,
request.ClientUICulture,
(IContextDictionary)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.ClientContext));
Deserialize<IContextDictionary>(request.ClientContext));

var dpr = await dataPortalServer.Fetch(objectType, criteria, context, true);

Expand Down Expand Up @@ -245,19 +245,19 @@ public async Task<DataPortalResponse> Update(UpdateRequest request)
if (request is null)
throw new ArgumentNullException(nameof(request));

var result = _applicationContext.CreateInstanceDI<DataPortalResponse>();
var result = new DataPortalResponse();
try
{
request = ConvertRequest(request);
// unpack object
object? obj = GetCriteria(_applicationContext, request.ObjectData);
object obj = GetCriteria(_applicationContext, request.ObjectData) ?? throw new InvalidOperationException(Resources.ObjectToBeUpdatedCouldNotBeDeserialized);

var context = new DataPortalContext(
_applicationContext, (IPrincipal)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.Principal),
_applicationContext, Deserialize<IPrincipal>(request.Principal),
true,
request.ClientCulture,
request.ClientUICulture,
(IContextDictionary)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.ClientContext));
Deserialize<IContextDictionary>(request.ClientContext));

var dpr = await dataPortalServer.Update(obj, context, true);

Expand Down Expand Up @@ -288,25 +288,25 @@ public async Task<DataPortalResponse> Delete(CriteriaRequest request)
if (request is null)
throw new ArgumentNullException(nameof(request));

var result = _applicationContext.CreateInstanceDI<DataPortalResponse>();
var result = new DataPortalResponse();
try
{
request = ConvertRequest(request);

// unpack criteria data into object
object? criteria = GetCriteria(_applicationContext, request.CriteriaData);
object criteria = GetCriteria(_applicationContext, request.CriteriaData);
if (criteria is DataPortalClient.PrimitiveCriteria primitiveCriteria)
{
criteria = primitiveCriteria.Value;
}

var objectType = Reflection.MethodCaller.GetType(AssemblyNameTranslator.GetAssemblyQualifiedName(request.TypeName), true);
var objectType = Reflection.MethodCaller.GetType(AssemblyNameTranslator.GetAssemblyQualifiedName(request.TypeName));
var context = new DataPortalContext(
_applicationContext, (IPrincipal)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.Principal),
_applicationContext, Deserialize<IPrincipal>(request.Principal),
true,
request.ClientCulture,
request.ClientUICulture,
(IContextDictionary)_applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(request.ClientContext));
Deserialize<IContextDictionary>(request.ClientContext));

var dpr = await dataPortalServer.Delete(objectType, criteria, context, true);

Expand All @@ -328,12 +328,9 @@ public async Task<DataPortalResponse> Delete(CriteriaRequest request)

#region Criteria

private static object? GetCriteria(ApplicationContext applicationContext, byte[]? criteriaData)
private static object GetCriteria(ApplicationContext applicationContext, byte[] criteriaData)
{
object? criteria = null;
if (criteriaData != null)
criteria = applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(criteriaData);
return criteria;
return applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(criteriaData) ?? throw new SerializationException(Resources.ServerSideDataPortalRequestDeserializationFailed);
}

#endregion Criteria
Expand Down Expand Up @@ -371,5 +368,16 @@ protected virtual DataPortalResponse ConvertResponse(DataPortalResponse response
}

#endregion Extention Method for Requests

private T Deserialize<T>(byte[] data)
{
var deserializedData = _applicationContext.GetRequiredService<ISerializationFormatter>().Deserialize(data) ?? throw new SerializationException(Resources.ServerSideDataPortalRequestDeserializationFailed);
if (deserializedData is not T castedData)
{
throw new SerializationException(string.Format(Resources.DeserializationFailedDueToWrongData, typeof(T).FullName));
}

return castedData;
}
}
}
7 changes: 5 additions & 2 deletions Source/Csla.Channels.Grpc/GrpcProxy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ public GrpcProxy(ApplicationContext applicationContext, GrpcChannel channel, Grp
private static GrpcChannel? _defaultChannel;
private string? _versionRoutingTag;

/// <inheritdoc />
public override string DataPortalUrl { get; }

/// <summary>
/// Gets the GrpcChannel used by the gRPC client.
/// </summary>
Expand Down Expand Up @@ -91,7 +94,7 @@ protected virtual GrpcService.GrpcServiceClient GetGrpcClient()
/// <param name="routingToken">Routing Tag for server</param>
/// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
/// <returns>Serialized response from server</returns>
protected override async Task<byte[]> CallDataPortalServer(byte[] serialized, string operation, string routingToken, bool isSync)
protected override async Task<byte[]> CallDataPortalServer(byte[] serialized, string operation, string? routingToken, bool isSync)
{
ByteString outbound = ByteString.CopyFrom(serialized);
var request = new RequestMessage
Expand All @@ -112,7 +115,7 @@ internal async Task<ResponseMessage> RouteMessage(RequestMessage request)
return await GetGrpcClient().InvokeAsync(request);
}

private string CreateOperationTag(string operation, string? versionToken, string routingToken)
private string CreateOperationTag(string operation, string? versionToken, string? routingToken)
{
if (!string.IsNullOrWhiteSpace(versionToken) || !string.IsNullOrWhiteSpace(routingToken))
return $"{operation}/{routingToken}-{versionToken}";
Expand Down
7 changes: 7 additions & 0 deletions Source/Csla.Channels.RabbitMq/Csla.Channels.RabbitMq.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@
<PackageReference Include="RabbitMQ.Client" Version="7.0.0" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.1'">
<PackageReference Include="Polyfill" Version="7.4.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Csla\Csla.csproj" />
</ItemGroup>
Expand Down
Loading
Loading