[英]System.ArgumentNullException
我收到這個例外...
System.ArgumentNullException: Value cannot be null.
Parameter name: typeName
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)
從此代碼中摘取-
private void submitButton_Click(object sender, EventArgs e)
{
CreateInventory create = new CreateInventory();
create.ItemAmount = textBoxAmount.Text;
create.ItemCategory = textBoxCategories.Text;
create.ItemProperties = textBoxValue.Text;
create.ItemValue = textBoxValue.Text;
InventoryMngr invtryMngr = new InventoryMngr();
invtryMngr.Create(create);
}
該代碼應以創建的文件結尾,並將這些值保存到文本文件中。 顯然,這方面發生了一些變化-我假設在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);
}
}
}
業務經理獲得服務
namespace HomeInventory2.Business
{
public abstract class Manager
{
private Factory factory = Factory.GetInstance();
protected IService GetService(String name)
{
return factory.GetService(name);
}
}
}
和工廠getservice
public IService GetService(string servicename)
{
Type type;
Object obj = null;
try
{
type = Type.GetType(GetImplName(servicename));
obj = Activator.CreateInstance(type);
}
catch (Exception e)
{
Console.WriteLine("Exception occured: {0}", e);
throw e;
}
return (IService)obj;
}
GetImplName
private string GetImplName(string servicename)
{
NameValueCollection settings =
ConfigurationManager.AppSettings;
return settings.Get(servicename);
}
這是您的問題:
NameValueCollection settings = ConfigurationManager.AppSettings;
return settings.Get(servicename);
確保您的app.config / web.config具有正確的AppSettings
值。 settings.Get(servicename)
沒有找到一鍵servicename
。
因此,如果服務名稱為“ AwesomeService”,則需要在appSettings中添加一個元素,例如:
<add key="AwesomeService" value="somevalue"/>
我像下面這樣修改您的代碼:
public void Create(CreateInventory inv)
{
InventorySvc inventorySvc =
(InventorySvc)GetService((typeof(InventorySvc)).toString());
inventorySvc.CreateInventory(inv);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.