アクティベーターと静的クラス
-
03-07-2019 - |
質問
そうでなければ、循環参照を作成するアセンブリ内のリソースにアクセスするために、Activatorクラスを使用するという考えをいじり回しています(依存性注入)。参照が必要なバニラクラスで以前にそれをやったことがありますが、私の質問は:Activatorを使用して静的クラスにアクセスできますか?
私をつまずかせているのは、Activatorがオブジェクトのインスタンスを返すのに対して、静的クラスにはインスタンスがないことです。これは可能ですか?
解決
メソッドを呼び出すためにアクティベーターは必要ありません。 MethodInfo.Invoke を直接使用します。最初のパラメーターはヌルのままにすることができます。
他のヒント
GvSは正しい-使用例は次のとおりです。
using System;
using System.Reflection;
class Program
{
static void Main()
{
Type type = Type.GetType("Foo");
MethodInfo info = type.GetMethod("Bar");
Console.WriteLine(info.Invoke(null, null));
}
}
static class Foo
{
public static String Bar() { return "Bar"; }
}
MethodInfo.Invokeを使用したもう1つの例
Type myStaticClassType = Type.GetType("MyStaticClassNameSpace",true);
object[] myStaticMethodArguments = {object1,object2...};
MethodInfo myStaticMethodInfo = myStaticClassType.GetMethod("YourMethod");
var myStaticMethodResult = myStaticMethodInfo.Invoke(null,myStaticMethodArguments);
静的クラスにインスタンスがないわけではなく、パブリックコンストラクターがないだけです。 Activatorはリフレクションを使用してインスタンスを作成します。リフレクションを使用すると、プライベートコンストラクターでも必要なものを呼び出すことができます
" resources"と言ってどういう意味か実際には、アセンブリに埋め込まれたリソースであるため、静的クラスを使用せずに、常に手動で抽出することができます( Assembly.GetManifestResourceStream()
を参照)。それらは純粋に反射です)。
Spring.NETには、 IResource 抽象化があります。
いいえ、 Activator
を使用して「作成」することはできません。静的クラス。
所属していません StackOverflow