0

私は、SolutionExplorerのグローバルIOCコンテナプロジェクトとしてLightInject(C#での軽量IOCコンテナ)をExirRobot.Infrastructureで使用しています(Picture Was Attached).Ioc Config Class (IOC.cs)をExirRobot.WebApiプロジェクトのinorderに配置して、サービスレイヤインターフェイス(IArticleServiceなど)をWeb APIコントローラに挿入するにはどうすればよいですか?ASP.NET Web Api 2でIOCコンテナを使用する

IOC.cs:

public class IOC{ 

    public static void Initialize() 
    { 
     var container = new LightInject.ServiceContainer();    
     //Engin Dependency Wiring 
     container.Register<ISISearchResult, ISIContentProvider>(new PerRequestLifeTime()); 
     container.Register<ISearchArticleEngine, ISIEngineManager>(new PerRequestLifeTime()); 

     //Repository Dependency Wiring 
     container.Register<IArticleRepository, ArticleRepository>(new PerRequestLifeTime()); 
     container.Register<IAuthorRepository, AuthorRepository>(new PerRequestLifeTime()); 
     container.Register<IIsiArticleDetailRepository, IsiArticleDetailRepository>(new PerRequestLifeTime()); 
     container.Register<IJournalRepository, JournalRepository>(new PerRequestLifeTime()); 
     container.Register<IVendorRepository, VendorRepository>(new PerRequestLifeTime()); 

     //Service Dependency Wiring 
     container.Register<IArticleService, ArticleService>(new PerRequestLifeTime()); 
     container.Register<IAuthorService, AuthorService>(new PerRequestLifeTime()); 
     container.Register<IIsiArticleDetailService, IsiArticleDetailService>(new PerRequestLifeTime()); 
     container.Register<IJournalService, JournalService>(new PerRequestLifeTime()); 
     container.Register<IVendorService, VendorService>(new PerRequestLifeTime()); 
} 
} 

enter image description here

+0

リンク先の画像ではなく、関連するコードを質問としてテキストとして投稿してください。 –

+0

私はコードとしてテキストを投稿します – mahtab

答えて

0

あなたはLightInjectためIDependencyResolverを実装する必要があるか、このNuGet packageを使用することができます。

これは、Web APIにそれを構成する方法である:

public static void Register(HttpConfiguration config) 
{ 
    var container = new UnityContainer(); 
    container.RegisterType<IProductRepository, ProductRepository>(new HierarchicalLifetimeManager()); 
    config.DependencyResolver = new UnityResolver(container); 

    // Other Web API configuration not shown. 
} 

Dependency Injection in ASP.NET Web API 2を参照してください。

+0

LightInject用のIDependencyResolver実装がありません。ExirRobot.InfrastructureプロジェクトのIOC.csクラスに依存関係が結ばれており、Web APIのIOC.csのInitializeメソッドをRegister()で呼び出す必要がありますHttpConfiguration config)メソッドを使用して、Registerメソッドで余分な配線を防ぐことができます。私のアプリケーションのライフサイクルでは、IOC Containerが1つしかなく、Web APIプロジェクトで使用します。 – mahtab

+0

あなたは何を意味するのか分かりませんが、DIをASP.NET Web APIで使用するには、IDependencyResolverまたはIHttpControllerFactoryを使用する必要があります。主題に関するMark Seemannの[post](http://blog.ploeh.dk/2012/09/28/DependencyInjectionandLifetimeManagementwithASP.NETWebAPI/)を参照してください。あなたのIOCクラスは大丈夫かもしれませんが、ASP.NET Web APIを使ってIDependencyResolverを実装する必要があります。 – Michael

関連する問題