2012-11-12 2 views
1

asp.net mvc에서 작업 중입니다. 4. 코드 첫 번째 모델과 함께 ninject 및 저장소 패턴을 사용하여 의존적 인 주입을 구현하려고합니다.asp.net mvc에서 ninjectcontrollerfactory에 생성자 인수를 전달하는 방법 DI

IMessageRepository

public interface IMessageRepository 
{ 
void IsMessageRead(); 
} 

MessageRepository

public class MessageRepository:IMessageRepository 
{ 
string id=""; 
public MessageRepository(string idparam) 
{ 
    id=idparam; 
} 
EFMsgContext context=new EFMsgContext(id); 
public void IsMessageRead() 
{ 
    ... 
} 
} 

EFMsgContext

public class EFMsgContext:Dbcontext 
{ 
public EFMsgContext(string id):base("MyContext") 
{ 
//based on id i will construct a connection string from my database. 
} 
.... 
} 

내 컨트롤러

public class MYController:Controller 
{ 
private IMessageRepository repo; 
public MYController(IMessageRepository repoparam) 
{ 
repo=repoparam; 
} 
public ActionResult Index() 
{ 
    repo.IsMessageRead(); 
} 
} 

그리고 난 내가 좋아하는 구상 클래스 내 인터페이스를 결합 의존성 주입해서 Ninject를 사용하고, 여기

ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>(); 

어떻게 바인딩에 생성자 매개 변수를 전달할 수있는 어떤 방법이 ninjectcontrollerfactory 내부에 연결 문자열을 생성하는 논리를 작성합니다. 제발 나를 안내 해줘.

답변

1

당신은 심지어 두 번째 인수로 Func를 전달할 수 있습니다

ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>().WithConstructorArgument("idparam", value); 

WithConstructorArgument 확장 방법을 사용해야합니다.

ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>() 
      .WithConstructorArgument("idparam", (c) => { 
        // read from somewhere and return 
       }); 
+0

답장을 보내 주셔서 감사합니다. 'value' 변수는 미리 정의되어 있거나 수동으로 초기화됩니다. –

+0

내 업데이트 된 답변보기 – VJAI

+0

MessageRepository 클래스에 두 개의 생성자 (매개 변수 및 매개 변수 포함)가 있으면 ninject에 두 번 등록해야합니까? 미리 감사드립니다 –