diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Service1.cs b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Service1.cs index 4088a04..3838c69 100644 --- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Service1.cs +++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Service1.cs @@ -11,6 +11,9 @@ using System.Threading.Tasks; using System.Web; using System.Web.Http.Dependencies; using Microsoft.Owin.Hosting; +using Ninject; +using Ninject.Syntax; +using Ninject.Web.Common; using SQLite.Net; using SQLite.Net.Attributes; using SQLite.Net.Platform.Win32; @@ -84,8 +87,17 @@ namespace WindowsDataCenter } } + public static class Configuration { + public static StandardKernel ConfigureNinject(SQLiteConnection conn) { + var kernel = new StandardKernel(); + kernel.Bind().ToConstant(conn); + kernel.Bind().To(); + + return kernel; + } + } public sealed class CardUniqueId { @@ -140,15 +152,100 @@ namespace WindowsDataCenter public List Users { get; set; } } + // Provides a Ninject implementation of IDependencyScope + // which resolves services using the Ninject container. + public class NinjectDependencyScope : IDependencyScope { + IResolutionRoot resolver; + + public NinjectDependencyScope(IResolutionRoot resolver) { + this.resolver = resolver; + } + + public object GetService(Type serviceType) + { + if (resolver == null) + throw new ObjectDisposedException("this", "This scope has been disposed"); + + return resolver.TryGet(serviceType); + } + + public System.Collections.Generic.IEnumerable GetServices(Type serviceType) + { + if (resolver == null) + throw new ObjectDisposedException("this", "This scope has been disposed"); + + return resolver.GetAll(serviceType); + } + + public void Dispose() + { + IDisposable disposable = resolver as IDisposable; + if (disposable != null) + disposable.Dispose(); + + resolver = null; } } + // This class is the resolver, but it is also the global scope + // so we derive from NinjectScope. + public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver { + IKernel kernel; + + public NinjectDependencyResolver(IKernel kernel) : base(kernel) { + this.kernel = kernel; + } + + public IDependencyScope BeginScope() + { + return new NinjectDependencyScope(kernel.BeginBlock()); } } + + public class NinjectHelper { + private static NinjectHelper _instance; + private static object _lockObject = new object(); + private StandardKernel _kernel; + + public static NinjectHelper GetInstance() + { + if (_instance == null) + { + throw new ArgumentNullException(); + } + return _instance; + } + public static NinjectHelper GetInstance(SQLiteConnection dbconn) + { + if (_instance != null) + return _instance; + lock (_lockObject) + { + _instance = new NinjectHelper(dbconn); + return _instance; + } + } + + private NinjectHelper(SQLiteConnection conn) + { + _kernel = Configuration.ConfigureNinject(conn); + } + + public StandardKernel Kernel { get { return _kernel; } private set { _kernel = value; } } + + public T Get() + { + return _kernel.Get(); + } + + public IEnumerable GetAll() + { + return _kernel.GetAll(); + } } } diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/StartOwin.cs b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/StartOwin.cs index 2534fe2..94e8ecb 100644 --- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/StartOwin.cs +++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/StartOwin.cs @@ -15,6 +15,7 @@ namespace WindowsDataCenter //); config.MapHttpAttributeRoutes(); + config.DependencyResolver = new NinjectDependencyResolver(NinjectHelper.GetInstance().Kernel); config.Formatters.Insert(0, new JsonpFormatter()); diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj index e6a2aff..dd2c6a3 100644 --- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj +++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj @@ -59,6 +59,16 @@ ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll True + + ..\packages\Ninject.3.2.0.0\lib\net45-full\Ninject.dll + True + + + ..\packages\Ninject.Web.Common.3.2.0.0\lib\net45-full\Ninject.Web.Common.dll + True + + + ..\packages\Ninject.Web.WebApi.3.2.4.0\lib\net45-full\Ninject.Web.WebApi.dll True diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config index a9c613c..7c1d558 100644 --- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config +++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config @@ -9,6 +9,9 @@ + + +