-
Notifications
You must be signed in to change notification settings - Fork 0
The IoC container
Funq has basically two ways of registering type factory functions. These functions can be anything which has the correct signature and are not limited to delegates of the form
c=> new MyType()
but could be
c => CreateAndInitialzeMyType(c.Resolve<IOne>(), c.Resolve<ITwo>)
The second is using the type-safe generic Register methods. There are versions for both named and un-named registrations. Both take as a parameter, a delegate which takes a Container as its single parameter and returns an instance of the type.
public IRegistration Register<TType>(Func<Container, TType> func)
public IRegistration Register<TType>(string name, Func<Container, TType>func)
The third method is using the type-safe generic RegisterInstance methods. There are versions for both named and un-named registrations. Both take as a parameter, an instance of the type.
public IRegistration Register<TType>(TType instance)
public IRegistration Register<TType>(string name, TType instance)
Of course there's also a way to use another IoC container. For this purpose the interface IContainerAdapter exists:
public interface IContainerAdapter
{
T Resolve<T>();
T TryResolve<T>();
}
So here's an example how to use Ninject side-by-side with Funq:
public class NinjectIocAdapter : IContainerAdapter
{
private readonly IKernel kernel;
public NinjectIocAdapter(IKernel kernel)
{
this.kernel = kernel;
}
public T Resolve<T>()
{
return this.kernel.Get<T>();
}
public T TryResolve<T>()
{
return this.kernel.TryGet<T>();
}
}
Then in the AppHost
Configure(Container container)
method you need to enable this adapter:
//Create Ninject IoC container
IKernel kernel = new StandardKernel();
//Now register all depedencies to your custom IoC container
//...
//Register Ninject IoC container, so ServiceStack can use it
container.Adapter = new NinjectIocAdapter(kernel);
- Why ServiceStack?
- What is a message based web service?
- Advantages of message based web services
- Why remote services should use separate DTOs
- Getting Started
- Reference
- Clients
- Formats
- View Engines 4. Razor & Markdown Razor
- Hosts
- Advanced
- Configuration options
- Access HTTP specific features in services
- Logging
- Serialization/deserialization
- Request/response filters
- Filter attributes
- Concurrency Model
- Built-in caching options
- Built-in profiling
- Messaging and Redis
- Form Hijacking Prevention
- Auto-Mapping
- HTTP Utils
- Virtual File System
- Config API
- Physical Project Structure
- Modularizing Services
- Plugins
- Tests
- Other Languages
- Use Cases
- Performance
- How To
- Future