우선, 의존성 주입은 나에게 비교적 새로운 것이다. Unity.MVC3을 사용하여 첫 번째 프로젝트를 수행했으며 이제는 새로운 프로젝트에서 Ninject로 전환하고 싶습니다. 닷넷 프로젝트에 가장 많이 사용되는 의존성 인젝터 인 것 같습니다. 그래서 지금, 내 프로젝트에서 Ninject v2.2.1.4를 Ninject.MVC3 v2.2.2.0과 함께 사용하려고합니다. 내 이전 프로젝트에서Ninject 및 HierarchicalLifetimeManager가있는 ASP.Net MVC 3 프로젝트?
내가 유니티를 사용했다, 내 부트 스트 래퍼 클래스에 다음 코드 같은 것을했다 : 이제
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<ITestService, TestService>();
container.RegisterType<IDatabaseFactory, DatabaseFactory>(new HierarchicalLifetimeManager());
container.RegisterType<IUnitOfWork, UnitOfWork>();
container.RegisterType<ILoggingService, LoggingService>();
container.RegisterControllers();
return container;
}
, 나는 나의 새로운 프로젝트는 다음 코드처럼 뭔가이 교체 NinjectMVC3 클래스 (App_Start) :
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ITestService>().To<TestService>();
//This does not compile:
//kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>(new HierarchicalLifetimeManager());
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
kernel.Bind<ILoggingService>().To<LoggingService>();
}
그러나, 나는 그것이 일반적으로 HierarchicalLifetimeManager의 사용을 필요로하기 때문에 내가의 DatabaseFactory 바인딩과 함께 무엇을해야하는지 모르겠어요. 누구나 제대로 DatabaseFactory 바인딩을 만드는 방법을 말해 줄 수 있습니까?
코드 샘플 및 설명을 보내 주셔서 감사합니다. 사실을 말하면, 나는 여전히 ASP.Net MVC와이 모든 패턴에 대해 많은 것을 배워야 만합니다. 나는 Nuget의 최신 패키지를 사용하고 있으므로 버전이 좋을 것입니다. BindModule.Load 재정의를 사용하는 것과 Ninject.MVC3에서 제공하는 NinjectMVC3 클래스에서 제공되는 RegisterServices() 메서드를 사용하는 것 사이에 차이가 있습니까? 그런데 MVC3 용 Ninject.Web.MVC 패키지는 없습니다. –
또한 HierarchicalLifetimeManager가 무엇인지 완전히 이해하지 못했습니다. MVC에 대해 배울 샘플 프로젝트에서 가져 왔습니다. Ninject를 사용할 때 대체해야 할 내용을 말씀해 주시겠습니까? –
나는 더 큰 차이가 없다는 것을 제외하고는 더 모듈화되어 있고 많은 프로젝트를 가지고 있다면 그들 자신의 NinjectModule AFAIK를 가질 수 있지만 두 번째 질문에 대답하기 위해 나는 알 수 없다.하지만 그것은 평생 동안해야 할 일이다 위의 예제를 Singleton, InRequestScope, InThreadScope와 같이 볼 수 있습니다. –