Trait runtime_injector::Request[][src]

pub trait Request: Sized {
    fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>;
}
Expand description

A request to an injector.

Grouping requests

Requests can be grouped together by using tuples to make multiple requests at once. Since there is a limit of 12 supported parameters/dependencies for factories, tuples can also be used to get around that limitation.

use runtime_injector::{Injector, IntoSingleton, Svc};

struct Bar;
struct Baz;
struct Foo(Svc<Bar>, Svc<Baz>);

impl Foo {
    pub fn new((bar, baz): (Svc<Bar>, Svc<Baz>)) -> Self {
        Foo(bar, baz)
    }
}

let mut builder = Injector::builder();
builder.provide(Foo::new.singleton());

let _injector = builder.build();

Owned service requests

Some services can be provided directly via owned pointers (Box<I>). These services can be requested directly via Box<I>, as a collection via Vec<Box<I>>, or lazily via an iterator via Services<I>.

use runtime_injector::{define_module, Injector, IntoTransient, Svc};

#[derive(Default)]
struct Foo;
struct Bar(Box<Foo>);

let module = define_module! {
    services = [
        Foo::default.transient(),
        Bar.transient(),
    ]
};

let mut builder = Injector::builder();
builder.add_module(module);

let injector = builder.build();
let _bar: Box<Bar> = injector.get().unwrap();

Required methods

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

Expand description

Performs the request to the injector.

Loading content...

Implementations on Foreign Types

impl<I: ?Sized + Interface> Request for Box<I>[src]

Requests an owned pointer to a service or interface. Not all providers can provide owned pointers to their service, so this may fail where Svc<T> requests would otherwise succeed.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<I: ?Sized + Interface> Request for Vec<Svc<I>>[src]

Requests all the implementations of an interface. For sized types, this will return at most one implementation. If no provider is registered for the given interface, then this will return an empty Vec<T>.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<I: ?Sized + Interface> Request for Vec<Box<I>>[src]

Requests all the implementations of an interface as owned service pointers. If no provider is registered for the given interface, then this will return an empty Vec<T>. If any provider cannot provide an owned service pointer, then an error is returned instead.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<I: ?Sized + Interface> Request for Option<Svc<I>>[src]

Tries to request a service pointer for a service or interface. If no provider has been registered for it, then returns None. This fails if there are multiple implementations of the given interface.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<I: ?Sized + Interface> Request for Option<Box<I>>[src]

Tries to request an ownedservice pointer for a service or interface. If no provider has been registered for it, then returns None. This fails if there are multiple implementations of the given interface or if the service cannot be provided via an owned service pointer.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Request for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) where
    T0: Request,
    T1: Request,
    T2: Request,
    T3: Request,
    T4: Request,
    T5: Request,
    T6: Request,
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Request for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) where
    T1: Request,
    T2: Request,
    T3: Request,
    T4: Request,
    T5: Request,
    T6: Request,
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Request for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) where
    T2: Request,
    T3: Request,
    T4: Request,
    T5: Request,
    T6: Request,
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T3, T4, T5, T6, T7, T8, T9, T10, T11> Request for (T3, T4, T5, T6, T7, T8, T9, T10, T11) where
    T3: Request,
    T4: Request,
    T5: Request,
    T6: Request,
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T4, T5, T6, T7, T8, T9, T10, T11> Request for (T4, T5, T6, T7, T8, T9, T10, T11) where
    T4: Request,
    T5: Request,
    T6: Request,
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T5, T6, T7, T8, T9, T10, T11> Request for (T5, T6, T7, T8, T9, T10, T11) where
    T5: Request,
    T6: Request,
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T6, T7, T8, T9, T10, T11> Request for (T6, T7, T8, T9, T10, T11) where
    T6: Request,
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T7, T8, T9, T10, T11> Request for (T7, T8, T9, T10, T11) where
    T7: Request,
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T8, T9, T10, T11> Request for (T8, T9, T10, T11) where
    T8: Request,
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T9, T10, T11> Request for (T9, T10, T11) where
    T9: Request,
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T10, T11> Request for (T10, T11) where
    T10: Request,
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T11> Request for (T11,) where
    T11: Request
[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl Request for ()[src]

Performs multiple requests at once. This is useful for grouping together related requests.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

Loading content...

Implementors

impl Request for Injector[src]

Requests the injector used to resolve services.

fn request(injector: &Injector, _info: &RequestInfo) -> InjectResult<Self>[src]

impl Request for RequestInfo[src]

Requests the information about the current request.

fn request(_injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<I: ?Sized + Interface> Request for Services<I>[src]

Lazily requests all the implementations of an interface.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<I: ?Sized + Interface> Request for Svc<I>[src]

Requests a service pointer to a service or interface. This request fails if there is not exactly one implementation of the given interface.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<R: Request> Request for Factory<R>[src]

Lazy request factory allowing requests to be made outside of service creation.

fn request(injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

impl<T: Service + AsAny + Clone> Request for Arg<T>[src]

Allows custom pre-defined values to be passed as arguments to services.

fn request(_injector: &Injector, info: &RequestInfo) -> InjectResult<Self>[src]

Loading content...