Created
June 27, 2016 06:13
-
-
Save odytrice/45aec008e7365de4005567177f18605c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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