Несколько вопросов о замке Виндзор - PullRequest
0 голосов
/ 19 мая 2011

Несколько вопросов о замке Виндзор.

У меня есть сервис, который выглядит следующим образом:

public interface IMysRepository
{
    ISomeObject GetById(int id);
}

public interface IMyService
{
     ISomeObject GetById(int id);
}

public class MyService : IMyService
{
     MyService(IMysRepository repository)
     {
          _repository = repository;
     }


     public ISomeObject GetById(int id)
     {
          return _repository.GetById(id);
     } 

     IMysRepository _repository
}

Я думаю, что лучше всего сделать это в контейнере, ноне уверен, должен ли я оставить это как Singleton или Transient.Единственное состояние, которое он хранит - это хранилище.Я думал, что лучше всего было бы использовать Singleton, и код тоже выглядит чище.Например:

//Singleton version.
var service = container.Reslove<IMyService>();
var obj = IMyService.GetById(100);

против

//Transient version.
var service = container.Reslove<IMyService>();
try
{
     var obj = IMyService.GetById(100);
}
finally
{
   container.Release(service);
}

Еще одна вещь, которая меня интересует, безопасна ли нить Касла?

1 Ответ

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

Это на самом деле зависит от того, как хранилище закодировано.Прочитайте эту статью , чтобы понять, как взаимодействуют компоненты разных стилей жизни.Я всегда стараюсь сделать свои компоненты поточно-ориентированными, не сохраняющими состояния, чтобы я мог сделать их одиночными, это упрощает все.

Кстати: вам следует избегать как можно большего вызова Resolve (). Не вызывайте контейнер, он позвонит вам .

И да, Windsor является поточно-ориентированным.

...