В моем контейнере IoC установлена следующая фабрика:
// Factory for late-binding scenarios
container.AddFacility<TypedFactoryFacility>();
container.Register(
Component
.For<IServiceFactory>()
.AsFactory()
);
Где IServiceFactory
:
public interface IServiceFactory
{
T Create<T>();
void Release(object service);
}
И тогда мой контроллер выглядит примерно так:
public class PostsController : BaseController
{
private readonly IServiceFactory serviceFactory;
private LinkService linkService
{
get { return serviceFactory.Create<LinkService>(); }
}
public PostsController(IServiceFactory serviceFactory)
{
if (serviceFactory == null)
{
throw new ArgumentNullException("serviceFactory");
}
this.serviceFactory = serviceFactory;
}
Суть в том, что даже когда у LinkService
есть PerWebRequest
образ жизни, мне это может не всегда понадобиться, поэтому вводить его напрямую мне кажется неправильным.
Хотя сейчас возникает вопрос: использую ли я здесь контейнер в качестве локатора службы?