Skip to content

Latest commit

 

History

History
49 lines (35 loc) · 1.85 KB

README.md

File metadata and controls

49 lines (35 loc) · 1.85 KB

pooDI is a Dependency Injection Container for C#. While created mainly for learning purpoes, it supports all basic DI features and is quite efficient at it.

usage

container

interface ISimpleClass { }
class SimpleClass1 : ISimpleClass { }
class SimpleClass2 { }
class SimpleClass3 {
    public SimpleClass2 {get;set;}
}

var container = new DI.Container();

container.RegisterType<SimpleClass1>(false); // Register a concrete class
container.RegisterType<ISimpleClass, SimpleClass1>(false); // Register an interface implementation
container.RegisterType<SimpleClass2>(true); // Register a singleton

var simpleClass3 = new SimpleClass3();
container.RegisterInstance<SimpleClass3>(simpleClass3); // Register existing instance

var simpleClass1 = container.Resolve<SimpleClass1>(); // Resolve a concrete class
var iSimpleClass1 = container.Resolve<ISimpleClass1>(); // Resolve an interface implementation

var simpleClass3 = new SimpleClass3();
container.BuildUp<SimpleClass3>(simpleClass3); // Resolve existing object's properties

container.RegisterType<SimpleClass1>(false).RegisterType<SimpleClass2>(true); // Methods can be chained

service locator

A global, simplified resolver.

var container = new DI.Container();

var serviceLocator = DI.ServiceLocator.Current; // Get a service locator instance
DI.ServiceLocator.setContainerProvider(() => container); // Set a container provider

var simpleClass = serviceLocator.GetInstance<ISimpleClass>(); // Get object, as registered in container

var serviceContainer = serviceLocator.GetInstance<IContainer>(); // Get back current container instance

mono?

Nope. It can be adjusted to work, but I am not wiling to do so.

confrontation

There is also a Confrontation project, providing a few simple benchmarks over well-known DI/IoC implementations, including Unity, Ninject, Autofac and Castle Windsor.