Skip to content

Instantly share code, notes, and snippets.

@odytrice
Created June 27, 2016 06:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save odytrice/45aec008e7365de4005567177f18605c to your computer and use it in GitHub Desktop.
Save odytrice/45aec008e7365de4005567177f18605c to your computer and use it in GitHub Desktop.
namespace Ninject.Web
open Ninject.Modules
open Pocket.Core
open System
open System.Reflection
open System.Web.Mvc
open Ninject
open Microsoft.FSharp.Core.Operators
/// Resolves Dependencies Using Ninject
type NinjectResolver private (loadChoice : Choice<INinjectModule [], Assembly>) =
let kernel = new StandardKernel(NinjectSettings(InjectAttribute = typeof<DependencyAttribute>))
do
match loadChoice with
| Choice1Of2 modules -> kernel.Load modules
| Choice2Of2 assembly -> kernel.Load assembly
member val Kernel = kernel with get
new(modules : INinjectModule []) = NinjectResolver(Choice1Of2 modules)
new(assembly : Assembly) = NinjectResolver(Choice2Of2 assembly)
interface IDependencyResolver with
member x.GetService(serviceType) = x.Kernel.TryGet(serviceType)
member x.GetServices(serviceType) = x.Kernel.GetAll(serviceType)
/// Manually Resolve Dependencies
type NinjectContainer() =
static member val private Resolver = Unchecked.defaultof<NinjectResolver> with get, set
static member RegisterModules(modules : INinjectModule []) =
NinjectContainer.Resolver <- NinjectResolver(modules)
DependencyResolver.SetResolver(NinjectContainer.Resolver)
static member RegisterAssembly() =
NinjectContainer.Resolver <- NinjectResolver(Assembly.GetExecutingAssembly())
DependencyResolver.SetResolver(NinjectContainer.Resolver)
static member Resolve() = NinjectContainer.Resolver.Kernel.Get()
static member GetKernel() = NinjectContainer.Resolver.Kernel :> IKernel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment