net4.0/netstd2.0 framework to allow you to wrap any object (static or dynamic) with a static interface even though it didn't inherit from it. It does this by emitting cached dynamic binding code inside a proxy.
ImpromptuInterface is available Nuget
Platform | Status |
---|---|
NET4 (Win) | |
NETSTD (Win/Mac/Linux) |
Some of the features of ImpromptuInterface
have been moved into another library called Dynamitey, ImpromptuInterface
depends on Dynamitey
.
ImpromptuInterface.FSharp
has been spun off into FSharp.Interop.Dynamic and also depends on Dynamitey
.
ImpromptuInterface.MVVM
has been spun off into it's own repo ImpromptuInterface.MVVM and only receives maitenance updates.
using ImpromptuInterface;
using Dynamitey;
public interface IMyInterface{
string Prop1 { get; }
long Prop2 { get; }
Guid Prop3 { get; }
bool Meth1(int x);
}
//Anonymous Class
var anon = new {
Prop1 = "Test",
Prop2 = 42L,
Prop3 = Guid.NewGuid(),
Meth1 = Return<bool>.Arguments<int>(it => it > 5)
};
var myInterface = anon.ActLike<IMyInterface>();
//Dynamic Expando object
dynamic expando = new ExpandoObject();
expando.Prop1 ="Test";
expando.Prop2 = 42L;
expando.Prop3 = Guid.NewGuid();
expando.Meth1 = Return<bool>.Arguments<int>(it => it > 5);
IMyInterface myInterface = Impromptu.ActLike(expando);