我有一個返回接口的函數。獲取類型作爲接口從函數返回
我想避免一堆IF ELSE並通過反射獲取類型。 所以我傳入命名空間,類型名稱和程序集名稱作爲字符串並構造類型確定。 但是,我被困在如何將它作爲界面返回。
我的界面名稱爲ILevel2。我返回所有實現它的類型,所以我希望folllowing會的工作,但沒有喜悅尚未...
有人能指出我在正確的方向.....
string instanceReq = String.Format("{0}.{1}, {2}", nameSpace, typName, assseblyName);
var myType = Type.GetType(instanceReq);
ILevel2 myInterface = myType.GetInterface("ILevel2");
return myInterface;
我得到一個編譯器錯誤就行了設置MyInterface的= .....
錯誤114無法隱式轉換類型 '的System.Type' 到 'Level2Obligations.ILevel2'。一個顯式轉換存在(是否 缺少 投?)d:\ TFS \ StockMaster_ECodes \ StockMaster_ECode_Admin_MVC5 \的WebAPI \ ECode_Web_Api \型號\ ECodeLevel2Request.cs 103 35 ECode_Web_Api
添加更多的細節......
在此刻一塌糊塗,但你可以看到 - 我想成爲更通用的,而不是IF(namesapaceandType ==「bghjbj」)
private ILevel2 GetDLLInstance(string namespaceAndType)
{
var assseblyName = "Level2_Mock_Api";
var nameSpace = "Level2_Mock_Api";
var typName = "MockAPI";
string instanceReq = String.Format("{0}.{1}, {2}", nameSpace, typName, assseblyName);
var myType = Type.GetType(instanceReq);
var myInterface = (ILevel2)myType.GetInterface("ILevel2");
return myInterface;
if (namespaceAndType.ToUpper() == "LEVEL2_MOCK_API.MOCKAPI")
{
return new Level2_Mock_Api.MockAPI();
}
else......
如果任何人有在未來這個問題這裏是我已經支持的功能....... ....
private ILevel2 GetDLLInstance(string AssemblyNamespaceAndType)
{
//As the name suggests this should be the Assembly Namespace and Type seperated by fullstops and is case sensitve
//eg Level2_Mock_Api.Level2_Mock_Api.MockAPI
string[] apiDetails = AssemblyNamespaceAndType.Split('.');
var assseblyName = apiDetails[0];
var nameSpace = apiDetails[1];
var typeName = apiDetails[2];
string typeReq = String.Format("{0}.{1}, {2}", nameSpace, typeName, assseblyName);
var myType = Type.GetType(typeReq);
if (myType != null)
return (ILevel2)Activator.CreateInstance(myType);
return null;
}
所以,現在,因爲當我需要添加新的實現,我只需要確保它們實現的接口,我會好到哪裏去;)
聽起來好像你需要構建一個*實例類型......目前還不清楚你想要實現什麼。如果你包含一個簡短的*完整的*示例(而不是片段),這將使它更容易幫助你 –
Aaaaah - 我看到喬恩,我有類型,現在創建一個這種類型的實例.... 我'我會看到我如何繼續。 – AntDC
以及希望我的回答將有助於在這方面:) –