myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac?

 
Beiträge zu diesem Thema Autor Datum
 Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac? Moritz83 24.10.2019 10:32
 RE: Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac? Abt 24.10.2019 12:17
 RE: Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac? Moritz83 24.10.2019 17:42
 RE: Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac? Abt 24.10.2019 18:04
 RE: Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac? Palladin007 24.10.2019 19:32

Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 50


Moritz83 ist offline

Gibt es beim SimpleContainer einen LifeTimeScope wie bei Autofac?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
24.10.2019 10:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
24.10.2019 12:17 Beiträge des Benutzers | zu Buddylist hinzufügen
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 50

Themenstarter Thema begonnen von Moritz83

Moritz83 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was würdest du mir raten? Back to Autofac oder eherwas anderes?
24.10.2019 17:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
24.10.2019 18:04 Beiträge des Benutzers | zu Buddylist hinzufügen
Palladin007 Palladin007 ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.02.2012
Beiträge: 1.263
Entwicklungsumgebung: Visual Studio 2017
Herkunft: NRW


Palladin007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich stand Mal vor einer ähnlichen Suche und habe das gefunden:

 http://featuretests.apphb.com/
 https://www.palmmedia.de/Blog/2011/8/30/...ance-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.
24.10.2019 19:32 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Monate.
Der letzte Beitrag ist älter als 8 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 03.07.2020 19:36