Skip to content
This repository has been archived by the owner on Jan 20, 2024. It is now read-only.

Features

Nikolay Pianikov edited this page Feb 23, 2017 · 51 revisions
  • Supports .NETStandard 1.0 and higher, .net core 1.0/framework 4.5/portable and higher.

  • Simple. Supports fluent API.

  • Fast.

  • Easiest way for TDD.

  • Supports configuring of IoC containers via Json, CSharp configuration files, attributes, fluent API. Also it is easy to ceate your own formats.

  • Supports DI specified by:

      contract - on or more types
    
      state - ordered type(s) of state
    
      tag  - represented by the value(s)
    
  • Supports hierarchy of containers.

  • Fully extensible by overriding implementations of behaviors described via the interfaces in the contracts assembly.

  • It is not necessary to have any additional references to IoC libraries, thus nearly any code could work according to IoC pattern without any additional changes. For example, this sample project does not know about IoC at all.

  • It provides an ability to use states during resolving. For example.

  • There is a set of pluggable features:

      ChildContainers - supports the resolving of child containers.
    
      Lifetimes - supports lifetimes (Singleton, AutoDisposing, PerContainer, PerResolve, PerThread, PerState).
    
      Scopes - supports scopes (Internal, Global).
    
      KeyComaprers - supports key comparers (AnyTag, AnyState, AnyTagAnyState).
    
      Enumerables - supports resolving via IEnumerable<>. Resolve all elements of specified contract.
    
      Observables - supports resolving via IObservable<>. Resolve all elements of specified contract.
    
      Tasks - supports injection via Task<>.
    
      Resolvers - supports resolving via IResolver<>, IProvider<>, Func<>.
    
      Cache - uses cache to optimize a performance.
    

And others. For example the feature "Tasks" allows injection of tasks.

        public EventRegistry(
             Task<IResolver> resolver,
             Task<IEventBroker> eventBroker,
             [State(0, typeof(string))] Task<IResolver<string, ILog>> logResolver)
        {
            logResolver.Start();
            resolver.Start();
            eventBroker.Start();
            Task.WaitAll(resolver, eventBroker, logResolver);
            ...
        }
Clone this wiki locally