I am getting this exception…
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)
Stemming from this code –
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);
}
That code should end in a file being created with those values being saved to a text file. Obviously something is breaking down along the line – I am assuming in the InventoryMngr file which looks like this.
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);
}
}
}
The business manager get service
namespace HomeInventory2.Business
{
public abstract class Manager
{
private Factory factory = Factory.GetInstance();
protected IService GetService(String name)
{
return factory.GetService(name);
}
}
}
And the Factory 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);
}
Here’s your problem:
Make sure your app.config/web.config has the correct
AppSettingsvalues.settings.Get(servicename)isn’t finding a key forservicename.So if the servicename is “AwesomeService”, you need an element in appSettings like:
<add key="AwesomeService" value="somevalue"/>