dotnet-sdk
dotnet-sdk copied to clipboard
Cryptic TypeLoadException if actor proxy interface is non-public
Consider the following code snippet:
ActorId actorId = new("123");
IMyActor proxy = ActorProxy.Create<IMyActor>(actorId, nameof(MyActor));
// The Init method invokes the actor directly, which then decides whether to apply de-dupe logic.
await proxy.MyMethod();
Also, assume IMyActor is an internal interface (non-public).
Expected Behavior
Internal interfaces should be supported, OR there should be a friendly exception explaining why my interface is invalid.
Actual Behavior
If IMyActor is internal, I get the following cryptic exception:
System.TypeLoadException: Type 'MyNamespace.IMyActor_.actorV1.proxyIMyActoractorV1Proxy' from assembly 'MyNamespace.IMyActor_.actorV1.proxy, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is attempting to implement an inaccessible interface.
It's not at all clear what needs to be done to fix this issue.
Pretty sure this is happening in here: https://github.com/dapr/dotnet-sdk/blob/master/src/Dapr.Actors/Builder/ActorCodeBuilder.cs
I think providing a better exception is probably the right path here. Maybe my understanding of the scoping is incorrect but I don't think we could index into an internal class that doesn't exist within our own assembly.