This question already has an answer here:
What is self-binding in an IoC container?
(1个答案)
4年前关闭。
什么是autofac中的
我是autofac的新手,
谢谢!
注册
注册
为了有可能同时按类型和接口(interface)注入(inject)服务,您应该在先前的注册中添加
如果您的服务实现了许多接口(interface),并且您想全部注册它们,则可以使用
您必须明确注册,因为Autofac不会自动进行注册(因为在某些情况下,您可能不想注册某些接口(interface))。
here in Autofac documentation也对此进行了描述
(1个答案)
4年前关闭。
什么是autofac中的
AsSelf()
?我是autofac的新手,
AsSelf
到底是什么,下面的两者有什么区别?builder.RegisterType<SomeType>().AsSelf().As<IService>();
builder.RegisterType<SomeType>().As<IService>();
谢谢!
最佳答案
通常,您希望将接口(interface)而不是实现注入(inject)到类中。
但是,假设您有:
interface IFooService { }
class FooService { }
注册
builder.RegisterType<FooService>()
允许您注入(inject)FooService
,但是即使IFooService
实现了它,也不能注入(inject)FooService
。这等效于builder.RegisterType<FooService>().AsSelf()
。注册
builder.RegisterType<FooService>().As<IFooService>()
允许您注入(inject)IFooService
,但不再注入(inject)FooService
-使用上面显示的.As<T>
“覆盖”默认注册“按类型”。为了有可能同时按类型和接口(interface)注入(inject)服务,您应该在先前的注册中添加
.AsSelf()
:builder.RegisterType<FooService>().As<IFooService>().AsSelf()
。如果您的服务实现了许多接口(interface),并且您想全部注册它们,则可以使用
builder.RegisterType<SomeType>().AsImplementedInterfaces()
-这使您可以通过其实现的任何接口(interface)来解析服务。您必须明确注册,因为Autofac不会自动进行注册(因为在某些情况下,您可能不想注册某些接口(interface))。
here in Autofac documentation也对此进行了描述
10-05 22:12