J'utilise Autofac pour DI et MVVM. Je suis un service global enregistré en tant que tel:Injection de propriété Autofac dans un service déjà enregistré
builder.RegisterType<MyGlobalService>().As<IGlobalService>().SingleInstance();
Je suis aussi à l'aide Autofac.Extras.NLog mise en œuvre à des fins d'exploitation forestière évidents:
builder.RegisterModule<NLogModule>();
cette façon, je peux obtenir l'instance de ce service et enregistreur dans l'un des mes ViewModels:
namespace MyNameSpace.ViewModels
{
class MyViewModel : BindableBase
{
readonly IGlobalService _globalService;
readonly ILogger _logger;
public MyViewModel (IGlobalService globalService, ILogger logger)
{
_globalService = globalService;
_logger = logger;
}}}(...)
Cela fonctionne très bien. Maintenant, je également voulez le support de journalisation dans MyGlobalService. Mais cette fois, je voudrais utiliser Property Injection, au lieu de Constructor Injection. Question: est-ce que je devrais enregistrer une telle règle différemment?
Exemple d'utilisation:
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: Questions traitées ci-dessous.
Votre code semble correct. Pourriez-vous inclure la trace de pile de l'exception? –
@ CyrilDurand merci pour votre temps. J'ai édité ma question depuis que je voulais injecter la propriété. L'injection de constructeur normale fonctionne bien! – IgorMF
'[Code externe]' est la partie intéressante :) Pourriez-vous faire un clic droit dessus et "montrer le code externe" puis modifier le poste :) –