I am a lone developer and Pluralsight is my salvation in helping me understand things like Repository and IoC, which I am just learning.
However I am finding the pattern awkward to use.
So I am using Unity IoC, and following ModelContainer class;
public static class ModelContainer
{
private static IUnityContainer instance;
static ModelContainer()
{
instance = new UnityContainer();
}
public static IUnityContainer Instance
{
get
{
instance.RegisterType<ISCD_CallDiaryRepository, SCD_CallDiaryRepository>(new HierarchicalLifetimeManager());
instance.RegisterType<ICompanyRepository, CompanyRepository>(new HierarchicalLifetimeManager());
instance.RegisterType<ISubcontractorRepository, SubcontractorRepository>(new HierarchicalLifetimeManager());
instance.RegisterType<ITradeRepository, TradeRepository>(new HierarchicalLifetimeManager());
instance.RegisterType<IEmployeeRepository, EmployeeRepository>(new HierarchicalLifetimeManager());
instance.RegisterType<ISubcontractorTradeRepository, SubcontractorTradeRepository>(new HierarchicalLifetimeManager());
instance.RegisterType<ICountyRepository, CountyRepository>(new HierarchicalLifetimeManager());
instance.RegisterType<IAddressLineRepository, AddressLineRepository>(new HierarchicalLifetimeManager());
return instance;
}
}
}
allows me to instantiate the repository classes in the constructor of my controller;
public SubcontractorController(
ISubcontractorRepository subcontractorRepository,
ISubcontractorTradeRepository subcontractorTradeRepository,
ICompanyRepository companyRepository,
ISCD_CallDiaryRepository scdCallDiaryRepository,
ITradeRepository tradeRepository,
IAddressLineRepository addressLineRepository)
{
this.SubcontractorRepository = subcontractorRepository;
this.SubcontractorTradeRepository = subcontractorTradeRepository;
this.CompanyRepository = companyRepository;
this.ScdCallDiaryRepository = scdCallDiaryRepository;
this.TradeRepository = tradeRepository;
this.AddressLineRepository = addressLineRepository;
}
What I find awkward about this setup is that if I want to use the CRUD functionality in these repository classes, I have to either do the functionality in the controllers, or pass the repository instance I have created as a parameter into the model class methods. I choose the latter, controllers are not meant to do much, but it doesn’t seem right to me to have to keep passing the repository parameter around.
What am I missing?
In provided sample, there is
SubcontractorControllercontroller with six dependecies, what is usually means that the controller tries to do too much at once, and could possibly violates Single responsibility principle. There are at least three way to improve situation: