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