Ich benutze Autofac zu DI und MVVM. Ich habe ein globaler Dienst als solche registriert:Autofac Property Injection in bereits registrierten Service
builder.RegisterType<MyGlobalService>().As<IGlobalService>().SingleInstance();
Ich bin auch Autofac.Extras.NLog Implementierung für offensichtliche Protokollierung unter Verwendung von:
builder.RegisterModule<NLogModule>();
So kann ich die Instanz dieses Dienstes und Logger in jeder bekommen kann Meine ViewModels:
namespace MyNameSpace.ViewModels
{
class MyViewModel : BindableBase
{
readonly IGlobalService _globalService;
readonly ILogger _logger;
public MyViewModel (IGlobalService globalService, ILogger logger)
{
_globalService = globalService;
_logger = logger;
}}}(...)
Es funktioniert super. Nun möchte ich Logging-Unterstützung in MyGlobalService. Aber diesmal möchte ich Property Injection anstelle von Constructor Injection verwenden.
Frage ist: sollte ich eine solche Regel anders registrieren?
Beispiel Nutzung:
namespace MyNameSpace.GlobalServices
{
class MyGlobalService : IGlobalService
{
public ILogger Logger { get; set; }
public MyGlobalService()
{
Logger.Debug("My Service Starting...")
// no DI happening, getting exception because "Logger" is null
}}}(...)
Edit: unten beantwortet.
Ihr Code sieht richtig aus. Könnten Sie den Stack-Trace der Ausnahme einschließen? –
@CyrilDurand danke für Ihre Zeit. Ich habe meine Frage bearbeitet, seit ich Immobilien injizieren wollte. Normale Konstruktor Injektion funktioniert gut! – IgorMF
'[External Code]' ist der interessante Teil :) Könntest du mit der rechten Maustaste darauf klicken und "externen Code anzeigen" dann den Beitrag bearbeiten :) –