2012-10-20 3 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); 
    } 
} 

에게

,745이다 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는 코드를 표시 할 수 있습니까? InventorySvc 인터페이스 –

답변

-1

인터페이스를 인스턴스화 할 수 없습니다. 인터페이스를 구현하는 클래스를 만들어야합니다. 당신의 create 방법

당신은 인터페이스의 인스턴스를 만들 수 없습니다
0

..

, 당신의 inventorySvc InventorySvc

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

이 작업을 수행했습니다.이 작업을 InventoryImpl로 변경하면 나에게도 같은 오류가 발생합니다. – Expecto

1

난 강력하게 당신의 getService이 (가) 인스턴스를 만들려고 의심을 구현하는 클래스로 캐스팅 .Net에서 인터페이스의 인스턴스를 생성하는 것은 불법입니다.

관련 문제