私は新しいWeb APIプロジェクトを作成しています。これで私はこのようなWeb APIをプロジェクトから離れてさらに2つのクラスライブラリプロジェクトを使用しています:ウェブAPIとクラスライブラリの両方でDIを使用する
APIプロジェクトでMyBlog.API (Web API project)
MyBlog.Services (Class library)- Contains additional business logic
MyBlog.Repositories (Class library) - contains all database related operations
iはサービスプロジェクトの参照を追加し、サービスのプロジェクトで、私はAPIがするので、リポジトリのプロジェクトの参照を追加しました通話サービスおよびサービスは、このようリポジトリを呼び出します:
API > Services > Repositories
私が直接、彼らがサービスを介して呼び出されます私のAPIコントローラを形成するリポジトリをコールする必要はありません。だから私はAPIプロジェクトでリポジトリプロジェクト参照を追加していません。
私はapiプロジェクトでunity.webapi依存性注入を実装しています。以下は、DIを実装するためのコードです:
リポジトリコード:DI実装と
namespace MyBlogs.Repositories
{
public interface ITestRepository
{
string Get();
}
}
namespace MyBlogs.Repositories
{
public class TestRepository:ITestRepository
{
public string Get()
{
return "test";
}
}
}
サービスコード:
namespace MyBlogs.Services
{
public interface ITestService
{
string Get();
}
}
namespace MyBlogs.Services
{
public class TestService : ITestService
{
private ITestRepository testRepository;
public TestService(ITestRepository testRepositoryParam)
{
this.testRepository = testRepositoryParam;
}
public string Get()
{
return this.testRepository.Get();
}
}
}
コントローラーコード:
public class ValuesController : ApiController
{
private ITestService testService;
public ValuesController(ITestService testServiceParam)
{
this.testService = testServiceParam;
}
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { this.testService.Get() };
}
}
し、最終的にunityconfigファイル:
私はので、どのように私はITestServiceとTestServiceにユニティsimilartにITestRepositoryとTestRepositoryを登録することができ、このunityconfigファイルを持っているAPIプロジェクトのリポジトリプロジェクト参照を追加していないようpublic static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<ITestService, TestService>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
は、今私は、ここで問題に直面しています?プロジェクト参照を追加せずにリポジトリプロジェクトの依存関係をどこか他の場所に登録する方法はありますか?または私がサービスプロジェクトで単一性を追加しようとしたら、それはどのように登録されますか?
は、私は、Web APIプロジェクトのGlobal.asaxの中unityConfigを登録している:良い質問です
protected void Application_Start()
{
UnityConfig.RegisterComponents();
}
mmm私はwebapiプロジェクトまたはコンソールプロジェクトでUnityを呼び出さなければならないと思います。 –
理論上、リポジトリを知っているMyBlogs.Servicesアセンブリ内に別のUnity設定を定義して登録することもできます。 あなたは)(そこリポジトリタイプを登録 MyBlogs.Servicesで別のUnityConfigを作る をリポジトリにWEBAPIからの参照を持っているし、その後 ServicesUnityConfig.RegsiterComponents() UnityConfig.RegisterComponentsないことをやって。 –
@eranotzapそれは良い試してみるよね。ありがとう。 –