myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Basistechnologien und allgemeine .NET-Klassen (https://www.mycsharp.de/wbb2/board.php?boardid=23)
--- Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac? (https://www.mycsharp.de/wbb2/thread.php?threadid=122302)


Geschrieben von Moritz83 am 24.10.2019 um 10:32:
  Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac?
Moin,

ich habe in meinem ersten Projekt Autofac integriert:

C#-Code:
public static IContainer Configure()
{
var builder = new ContainerBuilder();
builder.RegisterType<DbContext>().As<IDbContext>();
builder.RegisterType<EmployeeRepository>().As<IEmployeeRepository>();
builder.RegisterType<DepartmentRepository>().As<IDepartmentRepository>();
return builder.Build();
}

und dann so eingebunden

C#-Code:
var container = ContainerConfig.Configure();
using (var scope = container.BeginLifetimeScope())
{
var test = scope.Resolve<IDepartmentRepository>();
dept = test.GetById(DepartmentFK);
}

dies klappt auch soweit, allerdings schaue ich mir gerade anhand meines ersten Projekts "Caliburn.Micro" an und dachte mir das ich auch gleich den dort inegrierten "SimpleContainer" nutzen könnte. Ich habe den Bootstrapper bereits erstellt und der Teil mit dem Container sieht so aus:

C#-Code:
private SimpleContainer _container = new SimpleContainer();
protected override void Configure()
        {
            _container.Instance(_container);

_container
.Singleton<IWindowManager, WindowManager>()
.Singleton<IEventAggregator, EventAggregator>()
.Singleton<IDbContext, DbContext>()
.Singleton<IDepartmentRepository, DepartmentRepository>();

GetType().Assembly.GetTypes()
.Where(type => type.IsClass)
.Where(type => type.Name.EndsWith("ViewModel"))
.ToList()
.ForEach(viewModelType => _container.RegisterPerRequest(
viewModelType, viewModelType.ToString(), viewModelType));
}

Sodele, wenn ich nun folgendes mache:

C#-Code:
public class Test
{
private readonly IDepartmentRepository _dep;
public Test(IDepartmentRepository Dep)
{
_dep = Dep;
}

public DepartmentEntity teststuff()
{
var test = _dep.GetById(MyId);
return test;
}
}

sollte ich ja schlussendlich das Gleiche kriegen, allerdings bedingt durch das fehlende Using bleibt der Container offen (wenn ich das richtig verstanden habe). Wie kann ich das mit SimpleContainer erreichen?


Geschrieben von Abt am 24.10.2019 um 12:17:
 
IIRC hat der SimpleContainer im Gegensatz zu anderen Lösungen kein Lifetime Management; damit auch keine managed Lösung für Dein Problem.
Andere Lösungen haben ein sogenanntes Automatic Disposal auf Basis von IDispose.


Geschrieben von Moritz83 am 24.10.2019 um 17:42:
 
Was würdest du mir raten? Back to Autofac oder eherwas anderes?


Geschrieben von Abt am 24.10.2019 um 18:04:
 
Ich rate Dir: evaluier die Komponenten, bevor Du anfängst - das ist prinzipiell als Entwickler Dein Job :-)
Mach Dir zur Not ein einfaches Excel auf, schau nach, welche Features Du unbedingt benötigst und dann such nach entsprechenden Komponenten, die dazu passen.
Es gibt zig solcher Komponenten. Nur weil was für mich passt, heisst das nicht, dass es für Dich passt.

Ja, vermutlich wirst Du auch das ein oder andere Requirement vergessen: aber da lernt man einfach dazu.

PS: von Microsoft gibt es seit längerem ein eigenes Dependency Injection "Framework": Microsoft.Extensions.DependencyInjection
Wird in einigen WPF mit .NET Core Tutorials verwendet; wird aber für Framework genauso sein Dienst verrichten (sofern die entsprechende .NET Standard Version matched).


Geschrieben von Palladin007 am 24.10.2019 um 19:32:
 
Ich stand Mal vor einer ähnlichen Suche und habe das gefunden:

 http://featuretests.apphb.com/
 https://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison

Auf der ersten Seite werden viele Frameworks im Bezug auf die Features verglichen.
Im zweiten Artikel werden einige Frameworks (größtenteils die Gleichen) im Bezug auf Performance verglichen.


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 03.06.2020 14:49