On Github bergziege / praesi-ioc-container
IOC/DI
Welche Container gibt es
Welchen Container wir wirklich verwenden sollten ;-)
Spring.net
DryIOC
Unity
spring.net oder einen anderen Container mit cooler ORM Integration
unity, autofac, ... auf jeden Fall kein Schwergewicht mit 1001 Funktion, die nicht benötigt wird.
<object id="ContractorCoachingViewModel" type="Com.QueoFlow.TrackingtoolLogistik.WPF.Ui.UserControls.ContractorCoaching.ViewModels.ContractorCoachingViewModel, TrackingtoolLogistik.WPF" singleton="false"> <property name="ProjectService" ref="projectService" /> <property name="OrderImportService" ref="orderImportService" /> <property name="ProjectReportService" ref="projectReportService" /> <property name="SpecialPeriodService" ref="specialPeriodService" />
public T Create<T>(params object[] arguments) where T : class { IApplicationContext context = ContextRegistry.GetContext(); string typeName = typeof(T).Name; typeName = typeName.Substring(0, 1).ToLower() + typeName.Substring(1); T viewModel; if (arguments.Length > 0) { viewModel = context.GetObject(typeName, arguments) as T; } else { viewModel = context.GetObject(typeName) as T; } return viewModel; }
Unser bisheriger Standardcontainer mit sehr guter NHibernate Integration und Transaction Management sowie sehr umfargreichen AOP Möglichkeiten.
var c = new Container(); c.Register<IClient, SomeClient>(); c.Register<IService, SomeService>(); // somewhere else IClient client = c.Resolve<IClient>();
Ein sehr schneller Container, der teilweise in WPF Anwendungen eingesetzt wird, wenn keine weitere DB Anbindung notwendig ist und nur simples DI genötigt wird.
container.RegisterTypes( AllClasses.FromAssemblies(typeof(UnityConfig).Assembly), WithMappings.FromMatchingInterface, WithName.Default, WithLifetime.Transient); container.AddNewExtension<Log4NetExtension>(); /* resolve Varianten*/ IBaseUrlSettings baseUrlSettings = container.Resolve<IBaseUrlSettings>(); public SomeClass(IBaseUrlSettings baseUrlSettings){...} [Dependency] public ILog Logger { set; protected get; }
Etwas schwergewichtigerer Container von MS der in diversen WebApi und WPF Anwendungen eingesetzt, wenn keine weitere DB Anbindung benötigt wird.
[AppSettingsDependency("ReadingAnalysis.DecimalPlaces")] public int DecimalPlaces { get; set; }
Wiki Stichwort: DI-/IOC Container