2012-10-20 110 views
2

我有一個有幾個文本框的表單,您在文本框中輸入了一些值,然後當您按下提交時,它將值保存到文件中。但是,當我按下提交時,我得到以下異常。我已經將問題縮小到了InventoryMngr和CreateInventory代碼中的某些內容,但我不確定我在那裏做錯了什麼。System.MissingMethodException:無法創建接口的實例

System.MissingMethodException: Cannot create an instance of an interface. 
    at HomeInventory2.Services.Factory.GetService(String servicename) in C:\Users\Protego\documents\visual studio 2010\Projects\HomeInventory2\HomeInventory2\Services\Factory.cs:line 37 
    at HomeInventory2.Business.Manager.GetService(String name) in C:\Users\Protego\documents\visual studio 2010\Projects\HomeInventory2\HomeInventory2\Business\Manager.cs:line 14 
    at HomeInventory2.Business.InventoryMngr.Create(CreateInventory inv) in C:\Users\Protego\documents\visual studio 2010\Projects\HomeInventory2\HomeInventory2\Business\InventoryMngr.cs:line 19 
    at HomeInventory2.Form1.submitButton_Click(Object sender, EventArgs e) in C:\Users\Protego\documents\visual studio 2010\Projects\HomeInventory2\HomeInventory2\Form1.cs:line 52 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

InventoryMngr

namespace HomeInventory2.Business 
{ 
    public class InventoryMngr : Manager 
    { 
     /// <summary> 
     /// persists the inventory information 
     /// </summary> 
     /// <param name="inv"></param> 
     public void Create(CreateInventory inv) 
     { 
      InventorySvc inventorySvc = 
      (InventorySvc)GetService(typeof(InventorySvc).Name); 
      inventorySvc.CreateInventory(inv); 
     } 
    } 
} 

CreateInventory

namespace HomeInventory2.Domain 
{ 
    [Serializable] 
    public class CreateInventory 
    { 


     /// <summary> 
     /// item category 
     /// </summary> 
     private string itemCategory; 
     public String ItemCategory 
     { 
      set 
      { 
       itemCategory = value; 
      } 
      get 
      { 
       return itemCategory; 
      } 
     } 


     /// <summary> 
     /// item properties 
     /// </summary> 
     private string itemProperties; 
     public String ItemProperties 
     { 
      set 
      { 
       itemProperties = value; 
      } 
      get 
      { 
       return itemProperties; 
      } 
     } 


     /// <summary> 
     /// item amount 
     /// </summary> 
     private string itemAmount; 
     public String ItemAmount 
     { 
      set 
      { 
       itemAmount = value; 
      } 
      get 
      { 
       return itemAmount; 
      } 
     } 


     /// <summary> 
     /// item value 
     /// </summary> 
     private string itemValue; 
     public String ItemValue 
     { 
      set 
      { 
       itemValue = value; 
      } 
      get 
      { 
       return itemValue; 
      } 
     } 

    } 
} 

InventorySvc是一個接口

namespace HomeInventory2.Services 
{ 
    public interface InventorySvc : IService 
    { 
     void CreateInventory(CreateInventory createinventory); 
    } 
} 

InventoryImpl

namespace HomeInventory2.Services 
{ 
    public class InventoryImpl: InventorySvc 

    { 
     /// <summary> 
     /// Creates an output files with the given inventory information written to it, serves as placeholder - this will be replaced with a database system 
     /// </summary> 
     /// <param name="createinventory"></param> 
     public void CreateInventory(CreateInventory createinventory) 
     { 
      try 
      { 
       FileStream fileStream = new FileStream 
       ("CreateInventory.bin", FileMode.Create, 
       FileAccess.Write); 
       IFormatter formatter = new BinaryFormatter(); 
       formatter.Serialize(fileStream, createinventory); 
       fileStream.Close(); 
      } 
      catch (ItemNotFoundException) 
      { 
       throw new ItemNotFoundException("Output not created - see logs"); 
      } 
     } 
    } 
} 
+0

是InventorySvc的一個接口? – mcalex

+1

什麼GetService,你可以顯示code.Is InventorySvc一個接口 –

回答

-1

接口不能被實例化。你應該創建一個實現接口的類。

0

不能創建一個接口的實例..

create方法

,投你inventorySvc到實現InventorySvc

InventorySvc inventorySvc = 
     (yourClassImplementingInventorySvcInterface)GetService(typeof(InventorySvc).Name); 
+0

我這樣做,我把它改爲InventoryImpl,它給了我同樣的錯誤 – Expecto

1

我強烈懷疑你的GetService試圖營造一個實例類一個接口名稱。在.Net中非法使用接口創建實例。