PerRequestLifetimeManager solo se puede usar en el contexto de una solicitud HTTP

Tengo una aplicación MVC que usa Unity como su contenedor IoC y tengo múltiples servicios definidos en mi aplicación usando elPerRequestLifetimeManager.

container.RegisterType<IFileService, FileService>();

Todo funciona bien, excepto cuando traté de lanzar mi solución para automatizar tareas (como SharePoint TimerJobs), que comenzó en varios intervalos.

Para eso, he definido unServiceLocator-Tipo de claseContainerManager en un proyecto separado, eso hace esencialmente esto:

    public static object Resolve(string typeName)
    {
        var type = Type.GetType(typeName);
        return Resolve(type);
    }

    public static object Resolve(Type type)
    {
        object result = DependencyResolver.Current.GetService(type);
        return result;
    }

    public static T Resolve<T>() where T : class
    {
        object result = DependencyResolver.Current.GetService<T>();
        return (T)result;
    }

    public static object Resolve(string typeName)
    {
        var type = Type.GetType(typeName);
        return Resolve(type);
    }

    public static object Resolve(Type type)
    {
        object result = DependencyResolver.Current.GetService(type);
        return result;
    }

    public static T Resolve<T>() where T : class
    {
        object result = DependencyResolver.Current.GetService<T>();
        return (T)result;
    }

Y dentro de mi "TaskManager" hago lo siguiente:

var unitOfWork = ContainerManager.Resolve<IFileService>();

Ahora esto funciona cuando se inicia manualmente (cuando se origina en una HttpRequest). Sin embargo, esto no funciona cuando se inicia a través de mi hilo de fondo.

Intenté llamar a la unidad directamente (sin mi ServiceLocator), pero luego obtendré la excepción:PerRequestLifetimeManager can only be used in the context of an HTTP request

Así es como creo mis tareas:

    private ITask CreateTask()
    {
        ITask task = null;
        if (IsEnabled)
        {
            var type = System.Type.GetType(Type);
            if (type != null)
            {
                object instance = ContainerManager.Resolve(type);
                if (instance == null)
                {
                    // Not resolved
                    instance = ContainerManager.ResolveUnregistered(type);
                }

                task = instance as ITask;
            }
        }

        return task;
    }

¿Qué me estoy perdiendo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta