back
The basic idea behind Inversion of Control in context is dependency injection; you want to remove dependencies from your application and that dictates need of a tool to plug in these dependencies.
Other terms you might have heard floating around in this context is Contructor, Setter and Interface Injection; which is way of programming where and how dependecies are injected.
In example below; your car listing service depends on car repository whcih connects to db and gets you data.
public class CarLister
{
      ICarRepository _repository;
      public CarLister(ICarRepository repository){
            _repository = repository;
      }
}
There are numerous dependency injection frameworks available; I have used structure map and find is sufficient for needs of application. Idea is to scan assemblies and generate plug in graph for all objects; this allows structure map to contruct objects on demand.
Below is how to configure structure map; configuration below would allow you to scan all assemblies and register all declared registries.
 public class Bootstrapper
    {
        public static void Bootstrap()
        {
            //Initialize StructureMap
            ObjectFactory.Initialize(r =>
                r.Scan(assembly =>
                {
                    ScanProjectAssemblies(assembly);
                    if (assembly == null)
                        return;
                   
                    assembly.AddAllTypesOf(typeof (IStartupTask));                                                               
                    assembly.LookForRegistries();               
                  }));
           
        }
       /// <summary>
       /// Helper method to determine the project's assemblies to scan
       /// </summary>
       internal static void ScanProjectAssemblies(IAssemblyScanner assembly)
       {
           assembly.TheCallingAssembly();
           assembly.AssembliesFromApplicationBaseDirectory();
       }
    }
You can declare registries as per your need:
public class DomianRegistry: Registry
{
                  public DomianRegistry()
                  {
                              For(typeof(IRepository<>)).Use(typeof(Repository<>));
                  }
 
No comments:
Post a Comment