2012-04-27 29 views
0

assembly.CreateInstanceメソッドを使用して型のインスタンスを作成しようとすると例外が発生します。これは、コンストラクタでServiceContextのパラメータを期待して作成されているどんなタイプ、それを見てからassembly.CreateInstanceメソッドを使用して型のインスタンスを作成しようとすると例外が発生します

Assembly assembly = Assembly.LoadFrom(@"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.Office.Server.UserProfiles.dll"); 
Type type = assembly.GetType("Microsoft.Office.Server.UserProfiles.UserProfileManager"); 
object ins = assembly.CreateInstance(type.FullName); 

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. --->  System.ArgumentNullException: Value cannot be null. 
Parameter name: serviceContext 
    at Microsoft.Office.Server.UserProfiles.ProfileManagerBase..ctor(SPServiceContext serviceContext) 
    at Microsoft.Office.Server.UserProfiles.ProfileManagerBase..ctor(SPServiceContext serviceContext, Boolean ignorePrivacy) 
    at Microsoft.Office.Server.UserProfiles.UserProfileManager..ctor(SPServiceContext serviceContext, Boolean IgnoreUserPrivacy, Boolean backwardCompatible) 
    at Microsoft.Office.Server.UserProfiles.UserProfileManager..ctor() 
    --- End of inner exception stack trace --- 
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) 
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) 
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) 
    at System.Activator.CreateInstance(Type type, Boolean nonPublic) 
    at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) 
    at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) 
    at System.Reflection.Assembly.CreateInstance(String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) 
    at System.Reflection.Assembly.CreateInstance(String typeName) 
    at HomeWork.Program.Main(String[] args) in c:\users\amasud\documents\visual studio 2010\Projects\HomeWork\HomeWork\Program.cs:line 23 

答えて

1

Microsoft.Office.Server.UserProfiles.UserProfileManagerオブジェクトを反射的に作成する理由がわかりません。あなたの場合は、SPServerContextをコンストラクタに渡す必要があります。ここであなたがそれを行う方法があります。

Assembly assembly = Assembly.LoadFrom(@"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.Office.Server.UserProfiles.dll"); 
SPServiceContext serviceContext = SPServiceContext.Current; 
Type type = assembly.GetType("Microsoft.Office.Server.UserProfiles.UserProfileManager"); 
object ins = Activator.CreateInstance(type, serviceContext); 
1

を発生する例外に私のコードです。あなたはそれを設定していないので、クラッシュします。

+0

私はちょうど内部例外をチェックし、同じserviceContext例外も与えています。私はあなたにこれを行う方法を教えてくださいこの資料に新しいですか? –

+0

あなたがすでに受け入れてくれた答えだったのでしょうか、それともConstantorInfoクラスを使ったあまり優雅ではないが、より明白なアプローチでしょうか。 –

関連する問題