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 » GUI: WPF und XAML » Service Locator Pattern bringt Fehler bei Mehrfachregistrierung eines Services in versch. Assemblies
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Service Locator Pattern bringt Fehler bei Mehrfachregistrierung eines Services in versch. Assemblies

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

Dabei seit: 03.09.2017
Beiträge: 70


jok3r89 ist offline

Service Locator Pattern bringt Fehler bei Mehrfachregistrierung eines Services in versch. Assemblies

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

Hallo, ich versuche gerade ein Projekt zu verstehen "RoslynPad" weil ich teilweise bei mir davon was Implementieren will

Aber beim besten willen was passiert hier

C#-Code:
            var container = new ContainerConfiguration()
                .WithAssembly(typeof(MainViewModelBase).Assembly)   // RoslynPad.Common.UI
                .WithAssembly(typeof(MainView).Assembly);           // RoslynPad
            var locator = container.CreateContainer().GetExport<IServiceProvider>();


            _viewModel = locator.GetService<MainViewModelBase>();

Die Ausnahme die ausgelöst wird bringt mich nämlich auch nicht wirklich weiter.

Fehlermeldung:
System.Windows.Markup.XamlParseException
HResult=0x80131501
Message=Zeilennummer "15" und Zeilenposition "10" von "Durch den Aufruf des Konstruktors für Typ "ThePLCProject.Ui.Editor.Views.MainView", der den angegebenen Bindungseinschränkungen entspricht, wurde eine Ausnahme ausgelöst.".
Source=PresentationFramework
StackTrace:
at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)

Inner Exception 1:
CompositionFailedException: Only one export for the contract 'IServiceProvider' is allowed, but the following parts: 'SystemCompositionServiceProvider', 'SystemCompositionServiceProvider' export it.

Schon mal vielen Dank für die Geduld
Gruß
06.12.2018 21:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.868
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

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

Ist das eine Fehlermeldung mit dem original RoslynPad-Projekt? Oder hast du Sourcen davon in dein Projekt übernommen und erhältst dann diesen Fehler?

Durch das WithAssembly wird anscheinend zweimal dieselbe Assembly eingebunden (und dadurch für IServiceProvider die Klasse SystemCompositionServiceProvider zweimal registriert).

Wenn du die Sourcen alle in einer Assembly hast, reicht ein Aufruf von WithAssembly.
07.12.2018 09:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
page99 page99 ist männlich
myCSharp.de-Mitglied

Dabei seit: 10.11.2018
Beiträge: 5


page99 ist offline

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

Hallo jok3r89,

die Funktion WithAssembly durchsucht die angegebene Assembly nach Import/Exports Attributen und registriert diese. Die Fehlermeldung deutet auf eine Mehrfachregistrierung hin.

Zitat:
Fehlermeldung:
"Only one export for the contract 'IServiceProvider' is allowed, but the following parts: 'SystemCompositionServiceProvider', 'SystemCompositionServiceProvider' export it."

Befinden sich MainView und MainViewModelBase in der gleichen Assembly?

Cheers.
07.12.2018 09:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
jok3r89
myCSharp.de-Mitglied

Dabei seit: 03.09.2017
Beiträge: 70

Themenstarter Thema begonnen von jok3r89

jok3r89 ist offline

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

Hallo,
Der Code wurde angepasst RoslynPad befindet sich jetzt auch im gleichen Projekt.
Wenn ich das richtig verstehe könnte ich dann komplett darauf verzichten?

Edit:

C#-Code:
            var container = new ContainerConfiguration()
                .WithAssembly(typeof(MainView).Assembly);
            var locator = container.CreateContainer().GetExport<IServiceProvider>();

So gehts erst mal.

Also bisher finde ich es doch ganz schön übertrieben komplex so recht sind mir scheinbar die Vorteile noch nicht bewusst...

Vielen Dank fürs Helfen

Gruß

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von jok3r89 am 07.12.2018 16:10.

07.12.2018 15:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Der letzte Beitrag ist älter als 2 Jahre.
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.01.2021 07:29