【发布时间】:2019-01-22 07:23:09
【问题描述】:
我是 autofac 的新手。我在我的新 web api 2 项目中使用它。以下是 Global.asax 的 Application_Start() 方法调用的我的 autofac 配置代码。我不确定我对 InstancePerRequest() 的使用是否正确。更重要的是,它甚至需要使用吗?或者,我应该使用其他选项,例如 InstancePerLifeTimeScopre() 或 InstancePerDependency()?无论我是否使用这些生命周期范围选项中的任何一个,在调试期间,它们都会产生相同的结果。
public class IocConfig
{
//Autofac configuration
public static void Configure()
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<DeliveryCode>().As<IDeliveryCode>()
.InstancePerRequest();
builder.RegisterType<DeliveryContext>().As<IDeliveryContext>()
.InstancePerRequest();
builder.RegisterType<DeliveryStrategy>().As<IDeliveryStrategy>()
.InstancePerRequest();
IContainer container = builder.Build();
AutofacWebApiDependencyResolver resolver = new
AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
}
}
【问题讨论】:
-
假设您的控制器有两个依赖项 -
IBob和ICathy。Bob也依赖于ICathy。如果ICathy注册为InstancePerDependency,则将创建Cathy的两个实例。如果InstancePerLifeTimeScope,只会创建一个。哪个是对的?嗯,这取决于你想要 1 还是 2。