C# Autofac-重用组件中的注入服务以满足其他组件

C# Autofac-重用组件中的注入服务以满足其他组件,c#,autofac,C#,Autofac,使用Autofac,假设我有一个PersonRepository和一个EventRepository类,它们都依赖于IDataService服务。。。我在Mvc控制器操作中使用这两个存储库类(例如,也可以是一些MvvM WPF应用程序),如 我想确保,在使用存储库类并将它们注入IDataService实现时,这两个存储库类都接收到相同的IDataService实例 如何才能做到这一点?在注册组件时调用.SingleInstance()方法。(假设注册流畅)尝试使用重用规则实现,并使用生存期注册服

使用Autofac,假设我有一个PersonRepository和一个EventRepository类,它们都依赖于IDataService服务。。。我在Mvc控制器操作中使用这两个存储库类(例如,也可以是一些MvvM WPF应用程序),如

我想确保,在使用存储库类并将它们注入IDataService实现时,这两个存储库类都接收到相同的IDataService实例


如何才能做到这一点?

在注册组件时调用
.SingleInstance()
方法。(假设注册流畅)

尝试使用重用规则实现,并使用生存期注册服务。

这取决于IDataService的生存期

你想一次又一次地重复使用同一个吗?那么它基本上是一个单例,您必须配置Autofac将其视为一个单例:

builder.RegisterType<IDataService>().As<MyDataService>().SingleInstance();
builder.RegisterType().As().SingleInstance();
但是,如果您在MVC中运行,并且只想在HTTP请求的生存期内重用同一实例,则可以如下配置Autofac:

builder.RegisterType<IDataService>().As<MyDataService>().HttpRequestScoped();
builder.RegisterType().As().HttpRequestScoped();

SingleInstance实际上将创建一个singleton注册。如果有人想根据某种逻辑有选择地将服务的一个实例传递给一组使用者,而将另一个实例传递给另一组使用者,那该怎么办?然后您将实现一个工厂。MVC示例基本上就是我想要的解决方案。然而,考虑到我没有HTTP请求,我想知道解决方案是什么。(例如,在MvvM WPF应用程序中)在WPF应用程序中,它将是单例的。使用单例,我将为整个应用程序提供一个实例,而不是一个工作单元。。。没有?上面没有提到IDataService是一个工作单元。它听起来也不像是一个工作单元,而是一种服务。您的服务将是单例的,您的工作单元将在服务级别上进行管理——也就是说,每个C/U/D操作都将创建一个工作单元。好的,您是对的。谢谢你迄今为止的帮助。也许我虚构的例子不是最好的选择(呵呵:)看来工作单位确实是我想要的。但是,鉴于我希望避免在服务中使用Autofac代码,您如何做到这一点?(借助生存期作用域解释了autofac的工作单元,但代码被.Resolve()调用弄乱了。我想纯粹通过注入来实现这一点)生存期作用域确实是我得到的最接近的。但在所有示例(例如)中,您的代码似乎都被特定的Autofac代码(.Resolve()调用)弄乱了。这不是整个国际奥委会的目标吗,去耦合一切?(因此,您的代码中不需要任何特定的Autofac调用,而是需要注入所有内容)
builder.RegisterType<IDataService>().As<MyDataService>().HttpRequestScoped();