Have a code:
class MyClass : IMyInterface
{
public void DoSomething()
{
using(var dependency = new Dependency())
{
// some code
}
// some code
}
public void DoSomething2()
{
using(var dependency = new Dependency())
{
// some code
}
// some code
}
}
So, Dependency is a class inherited from IDisposable.
I want to rewrite code using Unity container:
class MyClass : IMyInterface
{
private readonly IDependency _dependency;
public MyClass(IDependency dependency)
{
_dependency = dependency;
}
public void DoSomething()
{
using(_dependecy)
{
// some code
}
// some code
}
public void DoSomething2()
{
using(_dependecy)
{
// some code
}
// some code
}
}
This solution isn't work because new instance of Dependency should be created for each "using". Ok, I should inject something like factory:
class MyClass : IMyInterface
{
private readonly IDependencyFactory _dependencyFactory;
public MyClass(IDependencyFactory dependencyFactory)
{
_dependencyFactory = dependencyFactory;
}
public void DoSomething()
{
using(var dependency = _dependecyFactory.Create())
{
// some code
}
// some code
}
public void DoSomething2()
{
using(var dependency = _dependecyFactory.Create())
{
// some code
}
// some code
}
}
Is this the solution? I'm in doubt, because:
- Such factories complicate code.
- How should I instantiate an instance of Dependency in DependencyFactory method Create? Only use the New keyword isn't good because in this case I lose Unity interception logic (logging, caching, etc.).
Dependencyfor type and why do you need to dispose it at the end of each method?