I had a class before I introduced dependency inject that looked like this:
public class Widget
{
public Widget Create()
{
using (DataProvider dataProvider = new DataProvder())
{
dataProvider.AddInput("name", name);
dataProvider.AddInput("path", path);
dataProvider.AddInput("dateCreated", DateTime.UtcNow);
using (var reader = _dataProvider.ExecuteReader("usp_widget_create"))
{
reader.Read();
return new Widget(reader);
}
}
}
}
Then I introduced dependency inject using Ninject and my class now looks like this so I don't create a dependency to the DataProvider class.
public class Widget
{
IDataProvider _dataProvider;
public Widget(IDataProvider dataProvider)
{
_dataProvider = dataProvider;
}
public Widget Create()
{
_dataProvider.AddInput("name", name);
_dataProvider.AddInput("path", path);
_dataProvider.AddInput("dateCreated", DateTime.UtcNow);
using (var reader = _dataProvider.ExecuteReader("usp_widget_create"))
{
reader.Read();
return new Widget(reader);
}
}
}
The problem with the new class is that one, the DataProvider won't get disposed and two, the properties of the DataProvider won't be reset. So if I call Create from the same object twice it will duplicate the parameters and throw an exception. I know I can explicitly fix the second issue by clearing the parameters, but I feel like there must be a more universal approach and I am missing something.
How should this situation be resolved?