Autofac - повторно использовать внедренный сервис в компоненте для удовлетворения других компонентов - PullRequest
1 голос
/ 25 мая 2011

Используя Autofac, предположим, что у меня есть класс PersonRepository и класс EventRepository, оба из которых зависят от службы IDataService ... Я использую оба класса репозитория в действии контроллера Mvc (например - может также быть какое-то приложение 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 ...

Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Это зависит от срока службы IDataService.

Хотите ли вы снова и снова использовать один и тот же?Тогда это в основном одноэлементный файл, и вы должны настроить Autofac так, чтобы он воспринимался как один:

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

Но если вы работаете в MVC и хотите повторно использовать один и тот же экземпляр только в течение срока действия HTTP-запроса,вы настраиваете Autofac так:

builder.RegisterType<IDataService>().As<MyDataService>().HttpRequestScoped();
0 голосов
/ 25 мая 2011

Попробуйте реализовать IComponentLifetime с вашими правилами повторного использования и зарегистрируйте сервисы, используя вашу жизнь.

0 голосов
/ 25 мая 2011

Вызовите метод .SingleInstance() при регистрации компонента.(при условии свободной регистрации)

...