首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.ArgumentNullException

System.ArgumentNullException
EN

Stack Overflow用户
提问于 2012-10-20 06:38:18
回答 2查看 8.9K关注 0票数 0

我得到了这个例外...

代码语言:javascript
复制
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)

源自这段代码-

代码语言:javascript
复制
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文件中,它看起来像这样。

代码语言:javascript
复制
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);
        }
    }
}

业务经理得到服务

代码语言:javascript
复制
namespace HomeInventory2.Business
{
    public abstract class Manager
    {
        private Factory factory = Factory.GetInstance();
        protected IService GetService(String name)
        {
            return factory.GetService(name);
        }
    }
}

和Factory getservice

代码语言:javascript
复制
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

代码语言:javascript
复制
private string GetImplName(string servicename)
        {
            NameValueCollection settings =
                ConfigurationManager.AppSettings;
            return settings.Get(servicename);
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-20 06:40:35

这就是你的问题:

代码语言:javascript
复制
NameValueCollection settings = ConfigurationManager.AppSettings;
return settings.Get(servicename);

确保您的app.config/web.config具有正确的AppSettings值。settings.Get(servicename)找不到servicename的密钥。

因此,如果服务名为"AwesomeService",则在appSettings中需要一个元素,如下所示:

<add key="AwesomeService" value="somevalue"/>

票数 2
EN

Stack Overflow用户

发布于 2012-10-20 06:43:10

我像下面这样修改你的代码:

代码语言:javascript
复制
public void Create(CreateInventory inv)
{
    InventorySvc inventorySvc =
        (InventorySvc)GetService((typeof(InventorySvc)).toString());
    inventorySvc.CreateInventory(inv);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12983396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档