. , Dependency Injection.
DI, , .
, :
- , , .
.
, : AutoFac, SimpleInjector, Ninject, Spring.NET .
, ( AutoFac)
var containerBuilder = new ContainerBuilder();
:
containerBuilder.RegisterType<MockDatabase>().As<IDatabase>().InstancePerDependency();
containerBuilder.RegisterType<Person>().As<IPerson>().InstancePerDependency();
InstancePerDependency , , IPerson, . , , SingleInstance, , IPerson, .
:
var container = containerBuilder.Build();
IPerson myPerson = container.Resolve<IPerson>();
myPerson.Id = 1;
myPerson.Save();
, :
interface IEntity
{
int Id { get; set; }
string TableName { get; }
}
interface IPerson: IEntity
{
void Save();
}
interface IDatabase
{
void Save(IEntity entity);
}
class SQLDatabase : IDatabase
{
public void Save(IEntity entity)
{
}
}
class MockDatabase : IDatabase
{
public void Save(IEntity entity)
{
return;
}
}
class Person : IPerson
{
IDatabase _database;
public Person(IDatabase database)
{
this._database = database;
}
public void Save()
{
_database.Save(this);
}
public int Id
{
get;
set;
}
public string TableName
{
get { return "Person"; }
}
}
, AutoFac Person , IDatabase.
, , :
containerBuilder.RegisterType<SqlDatabase>().As<IDatabase>().InstancePerDependency();
( ) , , google "Injection of Dependency" . , . .