Salut Fondamentalement, ce que vous voulez est DI si je comprends bien ... j'utiliser l'unité mais Ninject est le même .. essayer quelque chose comme:
public class HomeApiController : ApiController
{
private IWebSettingBll _webSettingBll;
private IPageBll _pageBll;
private IHomeBll _homeBll;
private readonly IHitCountBll _hitCountBll;
public HomeApiController(IWebSettingBll webSettingBll,IHitCountBll hitCountBll,IPageBll pageBll,IHomeBll homeBll)
{
_hitCountBll = hitCountBll;
_webSettingBll = webSettingBll;
_homeBll = homeBll;
_pageBll = pageBll;
}
}
Et puis vous Map
vos interfaces avec les implémentations correctes (classes) dans un seul fichier (donc ce sera facile si vous avez besoin de changer quelque chose .. parce que vous aurez besoin de le changer en un seul fichier et pas partout vous avez utilisé l'interface à la place des classes concrètes):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Ninject;
using Ninject.Web.Common.OwinHost;
using Ninject.Web.WebApi.OwinHost;
using Owin;
namespace SelfHostSIAE
{
public class Startup
{
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// jsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
appBuilder.UseErrorPage();
appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
appBuilder.UseNinjectMiddleware(CreateKernel);
appBuilder.UseNinjectWebApi(config);
//appBuilder.UseWebApi(config);
}
public static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<IWebSettingBll>().To<WebSettingBll>().InSingletonScope(); //<-- IF YOU WANT A SINGLETON
kernel.Bind<IPageBll>().To<PageBll>();
kernel.Bind<ILogger>().To<Logger>();
kernel.Bind<IHomeBll>().To<HomeBll>();
kernel.Bind<IHitCountBll>().To<HitCountBll>();
return kernel;
}
}
}
Voici un exemple avec Ninject .. Je l'utilise dans une (application console) WebAPI de'autonome .. mais est similaire à un projet WebAPI ou le type Toher de projet
Voir [refactorisation pour agréger les services] (http://blog.ploeh.dk/2010/02/02/RefactoringtoAggregateServices/) – NightOwl888