using System;
namespace Abp.Dependency
{
///
/// Extension methods to interface.
///
public static class IocResolverExtensions
{
///
/// Gets an object that wraps resolved object to be Disposable.
///
/// Type of the object to get
/// IIocResolver object
/// The instance object wrapped by
public static IDisposableDependencyObjectWrapper ResolveAsDisposable(this IIocResolver iocResolver)
{
return new DisposableDependencyObjectWrapper(iocResolver, iocResolver.Resolve());
}
///
/// Gets an object that wraps resolved object to be Disposable.
///
/// Type of the object to get
/// IIocResolver object
/// Type of the object to resolve. This type must be convertible .
/// The instance object wrapped by
public static IDisposableDependencyObjectWrapper ResolveAsDisposable(this IIocResolver iocResolver, Type type)
{
return new DisposableDependencyObjectWrapper(iocResolver, (T)iocResolver.Resolve(type));
}
///
/// Gets an object that wraps resolved object to be Disposable.
///
/// IIocResolver object
/// Type of the object to resolve. This type must be convertible to .
/// The instance object wrapped by
public static IDisposableDependencyObjectWrapper ResolveAsDisposable(this IIocResolver iocResolver, Type type)
{
return new DisposableDependencyObjectWrapper(iocResolver, iocResolver.Resolve(type));
}
///
/// Gets an object that wraps resolved object to be Disposable.
///
/// Type of the object to get
/// IIocResolver object
/// Constructor arguments
/// The instance object wrapped by
public static IDisposableDependencyObjectWrapper ResolveAsDisposable(this IIocResolver iocResolver, object argumentsAsAnonymousType)
{
return new DisposableDependencyObjectWrapper(iocResolver, iocResolver.Resolve(argumentsAsAnonymousType));
}
///
/// Gets an object that wraps resolved object to be Disposable.
///
/// Type of the object to get
/// IIocResolver object
/// Type of the object to resolve. This type must be convertible .
/// Constructor arguments
/// The instance object wrapped by
public static IDisposableDependencyObjectWrapper ResolveAsDisposable(this IIocResolver iocResolver, Type type, object argumentsAsAnonymousType)
{
return new DisposableDependencyObjectWrapper(iocResolver, (T)iocResolver.Resolve(type, argumentsAsAnonymousType));
}
///
/// Gets an object that wraps resolved object to be Disposable.
///
/// IIocResolver object
/// Type of the object to resolve. This type must be convertible to .
/// Constructor arguments
/// The instance object wrapped by
public static IDisposableDependencyObjectWrapper ResolveAsDisposable(this IIocResolver iocResolver, Type type, object argumentsAsAnonymousType)
{
return new DisposableDependencyObjectWrapper(iocResolver, iocResolver.Resolve(type, argumentsAsAnonymousType));
}
///
/// Gets a object that starts a scope to resolved objects to be Disposable.
///
///
/// The instance object wrapped by
public static IScopedIocResolver CreateScope(this IIocResolver iocResolver)
{
return new ScopedIocResolver(iocResolver);
}
///
/// This method can be used to resolve and release an object automatically.
/// You can use the object in .
///
/// Type of the object to use
/// IIocResolver object
/// An action that can use the resolved object
public static void Using(this IIocResolver iocResolver, Action action)
{
using (var wrapper = iocResolver.ResolveAsDisposable())
{
action(wrapper.Object);
}
}
///
/// This method can be used to resolve and release an object automatically.
/// You can use the object in and return a value.
///
/// Type of the service to use
/// Return type
/// IIocResolver object
/// A function that can use the resolved object
public static TReturn Using(this IIocResolver iocResolver, Func func)
{
using (var obj = iocResolver.ResolveAsDisposable())
{
return func(obj.Object);
}
}
///
/// This method starts a scope to resolve and release all objects automatically.
/// You can use the scope in .
///
/// IIocResolver object
/// An action that can use the resolved object
public static void UsingScope(this IIocResolver iocResolver, Action action)
{
using (var scope = iocResolver.CreateScope())
{
action(scope);
}
}
}
}