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); } } } }