C# 在Web服务中访问内部类和方法时没有代码隐藏

C# 在Web服务中访问内部类和方法时没有代码隐藏,c#,asp.net,web-services,assemblies,internal,C#,Asp.net,Web Services,Assemblies,Internal,我在某个名称空间中有一个Web服务,我们称它为MyNamespace。这是一个普通的Web服务,代码中包含webmethods。我还有一个附加的.cs文件,其中包含这些webmethods中使用的各种类。到目前为止还不错,对吧 然后我有一个额外的Web服务,只用于测试东西。它没有代码隐藏,它的代码直接位于.asmx文件中,因此我可以快速将其上载到服务器,而无需重建任何内容。此测试Web服务与第一段中提到的Web服务位于同一MyNamespace命名空间中,并且也位于同一项目中。在我尝试访问MyN

我在某个名称空间中有一个Web服务,我们称它为
MyNamespace
。这是一个普通的Web服务,代码中包含webmethods。我还有一个附加的.cs文件,其中包含这些webmethods中使用的各种类。到目前为止还不错,对吧

然后我有一个额外的Web服务,只用于测试东西。它没有代码隐藏,它的代码直接位于.asmx文件中,因此我可以快速将其上载到服务器,而无需重建任何内容。此测试Web服务与第一段中提到的Web服务位于同一
MyNamespace
命名空间中,并且也位于同一项目中。在我尝试访问
MyNamespace
的内部成员之前,它非常有效。这是办不到的,它们是看不见的,就好像它们是私人的一样


这是我可能开始胡说八道的地方,所以如果有必要,请纠正我。我环顾了一下,这似乎是“有意的”,因为没有适当代码隐藏的.asmx是在运行时编译的,不是适当程序集的一部分。由于内部成员仅在程序集中可用,因此它们在my.asmx代码中不可用是完全正确的。那么我的问题是——我是否可以在不将代码移到.asmx.cs代码隐藏文件的情况下以某种方式访问这些成员?

我认为使用反射可以实现这一点

例如:要在公共类上调用内部方法:

var myPublicClass = new PublicClass;
MethodInfo mInfo = typeof(PublicClass).GetMethod("InternalMethodName", BindingFlags.Instance | BindingFlags.NonPublic);

var result = mInfo.Invoke(myPublicCLass, null) // (replace null with an array of parameters if necessary)
或在内部类的实例中创建:

MethodInfo mInfo= Type.GetType(assemblyQualifiedName).GetConstructor(
                        BindingFlags.NonPublic | BindingFlags.Instance,
                        null,
                        new[] { typeof(string) },
                        null
                    );
object myInstance = mInfo.Invoke(new[] { "constructorArgument" });
编辑:内部静态类上的内部静态方法:

MethodInfo mInfo = Type.GetType(assemblyQualifiedName).GetMethod("InternalMethodName", BindingFlags.Static| BindingFlags.NonPublic);

var result = mInfo.Invoke(null, null) // (replace 2nd null with an array of parameters if necessary)

我想这是可能的使用反射

例如:要在公共类上调用内部方法:

var myPublicClass = new PublicClass;
MethodInfo mInfo = typeof(PublicClass).GetMethod("InternalMethodName", BindingFlags.Instance | BindingFlags.NonPublic);

var result = mInfo.Invoke(myPublicCLass, null) // (replace null with an array of parameters if necessary)
或在内部类的实例中创建:

MethodInfo mInfo= Type.GetType(assemblyQualifiedName).GetConstructor(
                        BindingFlags.NonPublic | BindingFlags.Instance,
                        null,
                        new[] { typeof(string) },
                        null
                    );
object myInstance = mInfo.Invoke(new[] { "constructorArgument" });
编辑:内部静态类上的内部静态方法:

MethodInfo mInfo = Type.GetType(assemblyQualifiedName).GetMethod("InternalMethodName", BindingFlags.Static| BindingFlags.NonPublic);

var result = mInfo.Invoke(null, null) // (replace 2nd null with an array of parameters if necessary)

对,反思,完全忘了,谢谢。这和我想的不完全一样,因为这不是最快的方法,但对于测试来说已经足够了。可以帮我举一个来自内部静态类的内部静态方法的例子吗?:)对,反思,完全忘了,谢谢。这和我想的不完全一样,因为这不是最快的方法,但对于测试来说已经足够了。可以帮我举一个来自内部静态类的内部静态方法的例子吗?:)