Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Offer to make public Shim constructor #57

Open
InsonusK opened this issue Dec 8, 2019 · 1 comment
Open

Offer to make public Shim constructor #57

InsonusK opened this issue Dec 8, 2019 · 1 comment

Comments

@InsonusK
Copy link

InsonusK commented Dec 8, 2019

Hello, I am using your framework.

I have meet such situation:
I need to Shim private static method. But your framework could not do it, because Shim.Replace could not understande reflection.

But I have found solution:
var _newShim = (Shim) typeof(Shim) .GetConstructor( BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] {typeof(MethodBase), typeof(object)}, null) .Invoke( new object[] { typeof(TestClass) .GetMethods(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod) .Single(m => m.Name == privateMethodName), null }); _newShim.With(delegate(int val) { return val + 1; });

It will be much easy if Shim have got public constructor.

@Miista
Copy link

Miista commented Jan 13, 2024

@InsonusK In the current implementation it's only possible to shim public members. I understand you would like the option to shim private (and possibly also internal and protected) members.

In its current form, the library uses expressions to resolve the method/property. This gives us a strongly typed way to verify the method-to-shim and its replacement.

Non-public members cannot (by definition) be resolved via expressions. We would therefore have to give up some of the strong typing to support this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants