问题描述
|
使用Autofac,假设我有一个PersonRepository和EventRepository类,它们都依赖于IDataService服务...我在Mvc Controller操作中使用了两个存储库类(例如-可能也是一些MvvM WPF应用程序),例如
public class Mycontroller : controller
{
public Mycontroller(PersonRepository personRepo,EventRepository eventRepo) {...}
...
public ActionResult Index(){ ... I use the repository classes in here ...}
}
public class PersonRepository
{
public PersonRepository(IDataService service){...}
}
public class EventRepository
{
public PersonRepository(IDataService service){...}
}
我想确保在使用存储库类并将其注入IDataService实现时,两个存储库类都接收到相同的IDataService服务实例。
我怎样才能做到这一点?
解决方法
这取决于IDataService的生存期。
您是否要一遍又一遍地重复使用同一张纸?然后,它基本上是一个单例,并且必须配置Autofac将其视为一个:
builder.RegisterType<IDataService>().As<MyDataService>().SingleInstance();
但是,如果您正在MVC中运行,并且只想在HTTP请求的生存期内重用同一实例,则可以像下面这样配置Autofac:
builder.RegisterType<IDataService>().As<MyDataService>().HttpRequestScoped();
,注册组件时调用“ 3”方法。 (假设流利的注册)
,尝试使用重用规则实施IComponentLifetime,并使用生命周期注册服务。