Kimono 0.0.3
See the version list below for details.
dotnet add package Kimono --version 0.0.3
NuGet\Install-Package Kimono -Version 0.0.3
<PackageReference Include="Kimono" Version="0.0.3" />
paket add Kimono --version 0.0.3
#r "nuget: Kimono, 0.0.3"
// Install Kimono as a Cake Addin #addin nuget:?package=Kimono&version=0.0.3 // Install Kimono as a Cake Tool #tool nuget:?package=Kimono&version=0.0.3
Kimono
_ _
| | ()
| | ___ _ __ ___ ___ _ __ ___
| |/ / | ' ` _ \ / _ | '_ \ / _ \
| <| | | | | | | () | | | | () |
||__|| || ||_/|| ||_/
Kimono is a dynamic proxy framework that allows intercepting methods and properties. Currently in development! Working on generating MSIL for out and ref parameters definitions. See below for examples.
public class Program
{
public void Main(string[] args)
{
var examples = new KimonoExamples();
examples.NoTargetWithHandlersInterceptorExample();
examples.TargetWithHandlersInterceptorExample();
examples.NoTargetWithCallbackInterceptorExample();
examples.TargetWithHandlersInterceptorExample();
examples.TargetWithInvocationChainInterceptorExample();
examples.NoTargetWithInvocationChainInterceptorExample();
}
}
public class KimonoExamples
{
public void NoTargetWithCallbackInterceptorExample()
{
var interceptorWithCallback = Interceptor.WithCallback<IFoo>(context => {
if (context.MemberName == "Baz") {
context.ReturnValue = new Baz {
A = context.Parameters.Get<string>("a"),
B = context.Parameters.Get<string>("b")
};
}
});
interceptorWithCallback.Bar();
}
public void TargetWithCallbackInterceptorExample()
{
var interceptorWithCallback = Interceptor.ForTarget<IFoo, Foo>(new Foo(), context => {
if (context.MemberName == "Baz") {
context.ReturnValue = new Baz {
A = context.Parameters.Get<string>("a"),
B = context.Parameters.Get<string>("b")
};
}
});
interceptorWithCallback.Bar();
}
public void NoTargetWithHandlersInterceptorExample()
{
var interceptorWithCallback = Interceptor.WithHandlers<IFoo>(new BazReturnInvocationHandler());
interceptorWithCallback.Bar();
}
public void TargetWithHandlersInterceptorExample()
{
var interceptorWithCallback = Interceptor.ForTargetWithHandlers<IFoo, Foo>(new Foo(), new BazReturnInvocationHandler());
interceptorWithCallback.Bar();
}
public void NoTargetWithInvocationChainInterceptorExample()
{
var interceptorWithCallback = Interceptor.ForTargetWithInovcationChain<IFoo, Foo>(new Foo(), builder => {
builder.Add((next, context) => {
if (context.MemberName == "Baz") {
context.ReturnValue = new Baz {
A = context.Parameters.Get<string>("a"),
B = context.Parameters.Get<string>("b")
};
}
next(context);
});
});
interceptorWithCallback.Bar();
}
public void TargetWithInvocationChainInterceptorExample()
{
var interceptorWithCallback = Interceptor.WithInovcationChain<IFoo>(builder => {
builder.Add((next, context) => {
if (context.MemberName == "Baz") {
context.ReturnValue = new Baz {
A = context.Parameters.Get<string>("a"),
B = context.Parameters.Get<string>("b")
};
}
next(context);
});
});
interceptorWithCallback.Bar();
}
private class BazReturnInvocationHandler : IInvocationHandler
{
public void Handle(IInvocationContext context)
{
if (context.MemberName == "Baz") {
context.ReturnValue = new Baz {
A = context.Parameters.Get<string>("a"),
B = context.Parameters.Get<string>("b")
};
}
}
}
}
public interface IFoo
{
void Bar();
Baz Baz(string a, string b);
}
public class Foo : IFoo
{
public void Bar()
{
}
public Baz Baz(string a, string b)
{
return new Baz { A = a, B = b };
}
}
public class Baz
{
public string A { get; set; }
public string B { get; set; }
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | 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 was computed. 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. |
-
net7.0
- IFluentInterface (>= 2.1.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Kimono:
Package | Downloads |
---|---|
Overmock
Overmock is a mocking framework that allows for very robust mocking configuration and validation. |
|
Kimono.Extensions.DependencyInjection
Kimono.Extensions.DependencyInjection contains extension methods for adding of interceptors to DI. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.1.1 | 184 | 8/15/2024 |
0.1.0 | 174 | 8/9/2024 |
0.0.12 | 320 | 3/27/2024 |
0.0.11-RC01 | 251 | 10/16/2023 |
0.0.10 | 194 | 10/11/2023 |
0.0.9 | 202 | 9/17/2023 |
0.0.9-RD01 | 173 | 8/28/2023 |
0.0.9-RC03 | 144 | 9/15/2023 |
0.0.9-RC02 | 165 | 8/30/2023 |
0.0.8 | 221 | 8/27/2023 |
0.0.7 | 195 | 8/27/2023 |
0.0.7-RC05 | 108 | 8/25/2023 |
0.0.7-RC04 | 135 | 8/24/2023 |
0.0.7-RC03 | 138 | 8/22/2023 |
0.0.7-RC02 | 128 | 8/19/2023 |
0.0.7-RC01 | 134 | 8/16/2023 |
0.0.6 | 178 | 8/15/2023 |
0.0.6-RC01 | 139 | 8/14/2023 |
0.0.5 | 172 | 8/14/2023 |
0.0.4 | 187 | 8/13/2023 |
0.0.3 | 175 | 8/13/2023 |
0.0.1 | 180 | 8/13/2023 |
0.0.1-RC03 | 146 | 8/13/2023 |
0.0.1-RC02 | 143 | 8/13/2023 |
0.0.1-RC01 | 155 | 8/11/2023 |
This is a first release and is meant for internal usages until further notice.