Будет ли соблюдаться срок службы при использовании TryResolve
вместо autowire? да.
Вы можете убедиться в этом, настроив проект, в котором вы проверяете время жизни зависимости. Я создал тестовый проект, чтобы продемонстрировать это.
Я создал 4 зависимости; 2, которые автоматически связываются, состоящие из зависимости, которая будет сохраняться (статическая) для всех запросов, и другой, которая будет длиться только для запроса. Две другие зависимости создаются с теми же соответствующими ReuseScope
, но они не связаны автоматически и будут разрешены с использованием метода TryResolve
. Таким образом:
container.RegisterAutoWiredAs<AutoStatic, IAutoStatic>();
container.RegisterAutoWiredAs<AutoRequest, IAutoRequest>().ReusedWithin(ReuseScope.Request);
container.Register<IResolveStatic>(c => new ResolveStatic());
container.Register<IResolveRequest>(c => new ResolveRequest()).ReusedWithin(ReuseScope.Request);
Когда каждая из зависимостей создается, их метод конструктора устанавливает время их создания в свойстве CreatedAt
.
public class AutoStatic : IAutoStatic
{
public string CreatedAt { get; set; }
public AutoStatic() { CreatedAt = DateTime.Now.ToString(); }
}
...
Статические зависимости, т.е. ReuseScope.Default
, всегда должны показывать время первого запроса для всех запросов. Зависимости с областью действия ReuseScope.Request
всегда должны иметь новое время создания при каждом запросе.
Итак, наш простой сервис, который докажет это:
public class TestController : Service
{
public IAutoStatic AutoStatic { get; set; }
public IAutoRequest AutoRequest { get; set; }
IResolveStatic ResolveStatic { get; set; }
IResolveRequest ResolveRequest { get; set; }
public void Get(TestRequest request)
{
ResolveStatic = EndpointHost.TryResolve<IResolveStatic>();
ResolveRequest = EndpointHost.TryResolve<IResolveRequest>();
Console.WriteLine("-NEW REQUEST-");
Console.WriteLine("Auto Static {0}", AutoStatic.CreatedAt);
Console.WriteLine("Resolve Static {0}", ResolveStatic.CreatedAt);
Console.WriteLine("Auto Request {0}", AutoRequest.CreatedAt);
Console.WriteLine("Resolve Request {0}", ResolveRequest.CreatedAt);
}
}
Результаты:
Таким образом, после 3 разных запросов с использованием как автопроводки, так и метода TryResolve
, мы видим, что статика работает, как и ожидалось, и область запроса аналогична.
Так что используйте autowire или TryResolve
ReuseScope
соблюдается.
person
Scott
schedule
02.02.2014