2012-04-27 22 views
0

當我嘗試通過assembly.CreateInstance方法創建類型的實例時發生異常。這是我的代碼中發生異常當我嘗試通過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

從它的外觀,無論何種類型要創建期待在構造一個serviceContext參數。你還沒有設置它,所以它崩潰了。

+0

我剛剛檢查了內部異常,它也給出了相同的serviceContext異常。我對這個東西很陌生,你能告訴我該怎麼做? – 2012-04-27 13:30:39

+0

本來是你已經接受的答案,或者可能是一個不那麼優雅但使用ConstructorInfo類的更明顯的方法。 – 2012-04-27 15:41:34

相關問題