dotnet-sdk icon indicating copy to clipboard operation
dotnet-sdk copied to clipboard

Cryptic TypeLoadException if actor proxy interface is non-public

Open cgillum opened this issue 3 years ago • 1 comments

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.

cgillum avatar Apr 09 '22 00:04 cgillum

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.

halspang avatar Apr 14 '22 21:04 halspang