우리는 의존성 주입을하기 위해 MVC3 프로젝트에서 Ninject를 사용하고 있습니다. Ninject 및 Ninject.MVC3 패키지에 패키지 참조를 추가하기 위해 NuGet을 사용했습니다.MVC3의 종속물 주입 - 컨트롤러 외부
public static class NinjectMVC3
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
bootstrapper.ShutDown();
}
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IPrincipal>().ToMethod(c => HttpContext.Current.User);
}
}
는 지금까지 내 컨트롤러에 의존성을 해결하기 위해 큰 일을했습니다 : 내가 이런 짓을하면 내 App_Start 폴더에 NinjectMVC3 클래스를 생성
public class HomeController : Controller {
protected IPrincipal principal { get; set; }
public HomeController(IPrincipal principal) {
this.principal = principal;
}
}
이 컨트롤러는 IPrincipal에 대한 종속성이있는 I 내 부트 스트 래퍼 클래스에서 HttpContext.Current.User로 확인하도록 설정했습니다. 나는 컨트롤러가 아닌 IPrincipal에 종속성이 다른 클래스가 :
public class NonControllerClass
{
protected IPrincipal Principal { get; set; }
public NonControllerClass(IPrincipal principal) {
}
}
내가이 종속성을 해결하는 방법에 대한 갈 것이라고 어떻게? 생성자의 매개 변수가 아닌 경우 어떻게해야합니까? }
'DependencyResolver'와 관련해서는 ASP.NET MVC 전용 솔루션입니다. (괜찮습니다) OP가 순수한 Ninject에서 동일한 기능을 수행하기를 원한다면, 호출 할 때 새로운 인스턴스를 인스턴스화 할 팩토리 함수를 반환하기 위해'Func'을 간단히 주입 할 수 있습니다. –
컨트롤러 액션의 속성에 뭔가가 필요합니다. 어떻게 주입합니까? – Dismissile
@Dismissile - MVC에서 매개 변수 삽입을 사용하지 않는다고 생각합니다. 사용자 정의 액션 호출자를 생성하는 것과 같은 일을해야 할 것입니다. http://codeclimber.net.nz/archive/2009/02/10/how-to-use-ninject-to-inject-dependencies-into-asp.net-mvc.aspx보기 좋지 않습니다. 나는 이것을 반대하는 것이 좋습니다. –