OutWit.Communication.Client.DynamicProxy
2.4.0
dotnet add package OutWit.Communication.Client.DynamicProxy --version 2.4.0
NuGet\Install-Package OutWit.Communication.Client.DynamicProxy -Version 2.4.0
<PackageReference Include="OutWit.Communication.Client.DynamicProxy" Version="2.4.0" />
<PackageVersion Include="OutWit.Communication.Client.DynamicProxy" Version="2.4.0" />
<PackageReference Include="OutWit.Communication.Client.DynamicProxy" />
paket add OutWit.Communication.Client.DynamicProxy --version 2.4.0
#r "nuget: OutWit.Communication.Client.DynamicProxy, 2.4.0"
#:package OutWit.Communication.Client.DynamicProxy@2.4.0
#addin nuget:?package=OutWit.Communication.Client.DynamicProxy&version=2.4.0
#tool nuget:?package=OutWit.Communication.Client.DynamicProxy&version=2.4.0
OutWit.Communication.Client.DynamicProxy
Runtime dynamic proxy support (Castle.Core) for WitRPC clients, enabling client.GetService<TService>() without a source-generated proxy.
Overview
OutWit.Communication.Client.DynamicProxy provides the runtime proxy generation path for the WitRPC client. When you call GetService<TService>() on a WitClient, this package uses Castle DynamicProxy to emit a proxy class for your service interface at runtime, so you can start calling remote methods without any code generation step.
This capability used to live inside the core packages. It was split out so that OutWit.Communication and OutWit.Communication.Client stay free of Castle.Core and publish cleanly under NativeAOT/trimming. The split changes nothing about the wire protocol or server behavior:
If your client uses
client.GetService<TService>()(no arguments, or thestrongAssemblyMatchflag) — add a reference to this package. Your code recompiles unchanged: the extension method keeps theOutWit.Communication.Clientnamespace.If your client uses the source-generated (static) proxy path —
client.GetService<TService>(interceptor => new MyServiceProxy(interceptor))with a[ProxyTarget]interface and theOutWit.Common.Proxy.Generatorpackage — you do not need this package. That path stays in the core client and is AOT-compatible.
Note: runtime proxy emission is not available under NativeAOT. For AOT-published clients, use the static proxy path instead.
Installation
Install-Package OutWit.Communication.Client.DynamicProxy
Usage
using OutWit.Communication.Client;
var client = WitClientBuilder.Build(options =>
{
options.WithWebSocket("ws://localhost:5000/api");
options.WithEncryption();
options.WithTimeout(TimeSpan.FromSeconds(5));
});
await client.ConnectAsync(TimeSpan.FromSeconds(5), CancellationToken.None);
// Runtime-generated proxy, courtesy of this package:
IMyService service = client.GetService<IMyService>();
var result = await service.DoWorkAsync("hello");
Set strongAssemblyMatch: false when the client and server load the contract types from differently named assemblies:
IMyService service = client.GetService<IMyService>(strongAssemblyMatch: false);
Learn More
- WitRPC Documentation
- Main packages: OutWit.Communication.Client (client core), OutWit.Communication.Server (server side)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Castle.Core (>= 5.2.1)
- OutWit.Communication.Client (>= 2.4.0)
-
net6.0
- Castle.Core (>= 5.2.1)
- OutWit.Communication.Client (>= 2.4.0)
-
net7.0
- Castle.Core (>= 5.2.1)
- OutWit.Communication.Client (>= 2.4.0)
-
net8.0
- Castle.Core (>= 5.2.1)
- OutWit.Communication.Client (>= 2.4.0)
-
net9.0
- Castle.Core (>= 5.2.1)
- OutWit.Communication.Client (>= 2.4.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on OutWit.Communication.Client.DynamicProxy:
| Package | Downloads |
|---|---|
|
OutWit.InterProcess.Host
Provides host-side functionality to launch external processes and connect to them via WitRPC, allowing your application to use out-of-process services as if they were local (handles process startup and client proxy generation). |
|
|
OutWit.Communication.Client.DependencyInjection
Microsoft.Extensions.DependencyInjection integration for WitRPC client, providing easy registration and lifecycle management of WitRPC client services. |
|
|
OutWit.Communication.Client.Blazor
Blazor WebAssembly channel factory for WitRPC communication over WebSocket with RSA/AES encryption via the Web Crypto API. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.4.0 | 56 | 8/13/2026 |