آموزش LightInject IoC Container - قسمت 1
نویسنده: میثم خوشبخت
تاریخ: ۱۳۹۳/۰۲/۰۸ ۱۶:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
PM> Install-Package LightInject
PM> Install-Package LightInject.Source
public class PersonModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Family { get; set; }
public DateTime Birth { get; set; }
}
public interface IRepository<T> where T:class
{
void Insert(T entity);
IEnumerable<T> FindAll();
}
public interface IPersonRepository:IRepository<PersonModel>
{
}
public class PersonRepository:IPersonRepository
{
public void Insert(PersonModel entity)
{
throw new NotImplementedException();
}
public IEnumerable<PersonModel> FindAll()
{
throw new NotImplementedException();
}
}
public interface IPersonService
{
void Insert(PersonModel entity);
IEnumerable<PersonModel> FindAll();
}
public class PersonService:IPersonService
{
private readonly IPersonRepository _personRepository;
public PersonService(IPersonRepository personRepository)
{
_personRepository = personRepository;
}
public void Insert(PersonModel entity)
{
_personRepository.Insert(entity);
}
public IEnumerable<PersonModel> FindAll()
{
return _personRepository.FindAll();
}
} public partial class Form1 : Form
{
private readonly IPersonService _personService;
public Form1(IPersonService personService)
{
_personService = personService;
InitializeComponent();
}
} static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var container = new ServiceContainer();
container.Register<IPersonService, PersonService>();
container.Register<IPersonRepository, PersonRepository>();
Application.Run(new Form1(container.GetInstance<IPersonService>()));
} public class WorkerModel:PersonModel
{
public ManagerModel Manager { get; set; }
}
public class ManagerModel:PersonModel
{
public IEnumerable<WorkerModel> Workers { get; set; }
}
public class WorkerRepository:IPersonRepository
{
public void Insert(PersonModel entity)
{
throw new NotImplementedException();
}
public IEnumerable<PersonModel> FindAll()
{
throw new NotImplementedException();
}
}
public class ManagerRepository:IPersonRepository
{
public void Insert(PersonModel entity)
{
throw new NotImplementedException();
}
public IEnumerable<PersonModel> FindAll()
{
throw new NotImplementedException();
}
}
public class WorkerService:IPersonService
{
private readonly IPersonRepository _personRepository;
public WorkerService(IPersonRepository personRepository)
{
_personRepository = personRepository;
}
public void Insert(PersonModel entity)
{
var worker = entity as WorkerModel;
_personRepository.Insert(worker);
}
public IEnumerable<PersonModel> FindAll()
{
return _personRepository.FindAll();
}
}
public class ManagerService:IPersonService
{
private readonly IPersonRepository _personRepository;
public ManagerService(IPersonRepository personRepository)
{
_personRepository = personRepository;
}
public void Insert(PersonModel entity)
{
var manager = entity as ManagerModel;
_personRepository.Insert(manager);
}
public IEnumerable<PersonModel> FindAll()
{
return _personRepository.FindAll();
}
} ...
var container = new ServiceContainer();
container.Register<IPersonService, PersonService>();
container.Register<IPersonService, WorkerService>();
container.Register<IPersonRepository, PersonRepository>();
container.Register<IPersonRepository, WorkerRepository>();
Application.Run(new Form1(container.GetInstance<IPersonService>())); ...
container.Register<IPersonService, PersonService>("PersonService");
container.Register<IPersonService, WorkerService>();
container.Register<IPersonRepository, PersonRepository>();
container.Register<IPersonRepository, WorkerRepository>();
Application.Run(new Form1(container.GetInstance<IPersonService>("PersonService"))); container.Register<IPersonService, PersonService>("PersonService");
Application.Run(new Form1(container.GetInstance<IPersonService>())); container.Register<IPersonService, PersonService>();
container.Register<IPersonService, WorkerService>("WorkerService");
var personList = container.GetInstance<IEnumerable<IPersonService>>(); container.Register<IPersonService, PersonService>();
container.Register<IPersonService, WorkerService>("WorkerService");
var personList = container.GetAllInstances<IPersonService>(); container.RegisterInstance<string>("SomeValue");
var value = container.GetInstance<string>(); container.RegisterInstance<string>("SomeValue","String1");
container.RegisterInstance<string>("OtherValue","String2");
var value = container.GetInstance<string>("String2");