Qu'est-ce que AsSelf()
dans autofac? Je suis nouveau sur autofac, quelle est exactement AsSelf
et quelle est la différence entre les deux ci-dessous?
builder.RegisterType<SomeType>().AsSelf().As<IService>();
builder.RegisterType<SomeType>().As<IService>();
Je vous remercie!
En règle générale, vous souhaitez injecter des interfaces plutôt que des implémentations dans vos classes.
Mais supposons que vous ayez:
interface IFooService { }
class FooService { }
L'enregistrement de builder.RegisterType<FooService>()
vous permet d'injecter FooService
, mais vous ne pouvez pas injecter IFooService
, même si FooService
l'implémente. Cela équivaut à builder.RegisterType<FooService>().AsSelf()
.
L'enregistrement de builder.RegisterType<FooService>().As<IFooService>()
vous permet d'injecter IFooService
, mais plus FooService
- en utilisant .As<T>
"Remplace" l'enregistrement par défaut "par le type" indiqué ci-dessus.
Pour avoir la possibilité d'injecter un service à la fois par type et par interface, vous devez ajouter .AsSelf()
à l'enregistrement précédent: builder.RegisterType<FooService>().As<IFooService>().AsSelf()
.
Si votre service implémente de nombreuses interfaces et que vous souhaitez toutes les enregistrer, vous pouvez utiliser builder.RegisterType<SomeType>().AsImplementedInterfaces()
- cela vous permet de résoudre votre service par n'importe quelle interface qu'il implémente.
Vous devez être explicite dans votre inscription, car Autofac ne le fait pas automatiquement (car dans certains cas, vous ne voudrez peut-être pas enregistrer certaines interfaces).
Ceci est également décrit dans ici dans la documentation Autofac