我是Autofac依赖注入的新手,我得到了与我的项目相关的这些问题。我已经阅读了很多文章,但我没有清楚地了解我的一些问题。我是.Net REST API上的服务应用程序。我正在App_Start
模块中进行实例注册,如下所示。
private static IContainer RegisterServices(ContainerBuilder builder)
{
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<DCLMessengerContext>()
.As<DbContext>()
.ExternallyOwned()
.InstancePerLifetimeScope();
builder.RegisterType<DbFactory>()
.As<IDbFactory>()
.ExternallyOwned()
.InstancePerLifetimeScope();
builder.RegisterType<UnitOfWork>()
.As<IUnitOfWork>()
.InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(EntityBaseRepository<>))
.As(typeof(IEntityBaseRepository<>))
.InstancePerLifetimeScope();
builder.RegisterType<PersonServiceClient>()
.As<IPerfService>()
.InstancePerLifetimeScope();
builder.RegisterType<PagingServiceContractClient>()
.As<PagingServiceContract>()
.InstancePerLifetimeScope();
builder.RegisterType<MessageService>()
.As<IMessageService>()
.InstancePerLifetimeScope();
Container = builder.Build();
return Container;
}
我的服务层是&#34; MessageService&#34;我正在执行所有数据库和其他集成操作,并通过构造函数注入获取实例。这些是我对此实现的问题。
InstancePerLifeTimeScope
进行所有注册。这是正确的方法吗?在每个控制器请求(http请求)的生命周期之后,这些实例是否会自动处理?Dispose
操作? (我的代码中没有任何非托管对象)Task.Run()
创建一个fire&amp; forget线程。为这个火灾和遗忘线程提供实例的最佳方法是什么?如果我使用InstancePerLifeTimeScope
,我可以看到新线程也获得了通过服务类可用的相同实例,所以我只是在处理这些实例时感到困惑?答案 0 :(得分:2)
解析每个生命周期范围组件的实例时,会得到一个 每个嵌套范围的单个实例
这是正确的方法吗?
这取决于你的需要。如果你需要单身对象,那就不是。如果您只想在请求范围中使用此服务,请使用instanceperrequest,这样会更好。