0

"약간"작동하는 IoC 컨테이너로 Unity를 사용하려고합니다. Global.asax에에서Unity와 ASP.NET MVC를 사용한 종속성 삽입

싹둑 :이 종속성 내 'Timeregistreringer' - 컨트롤러에 추가됩니다

protected void Application_Start() 
    { 
     //... left out for clarity 

     //setup dependency injection with Microsoft Unity 
     DependencyInjection(); 
    } 

    private void DependencyInjection() 
    { 
     var container = new UnityContainer(); 

     container.RegisterType<ITimeregEntities, TimeregEntities>() 
      .Configure<InjectedMembers>() 
      .ConfigureInjectionFor<TimeregEntities>(new InjectionConstructor()); 

     container.RegisterType<TimeregistreringerController.IHelloWorld, TimeregistreringerController.MyHelloWorld>(); 

     //###PROBLEM HERE### 
     container.RegisterType<ITimeregistreringerRepository, TimeregistreringerRepository>(); 
     //###END-PROBLEM### 

     var factory = new UnityControllerFactory(container); 

     ControllerBuilder.Current.SetControllerFactory(factory); 
    } 

가 :

public class TimeregistreringerController : BaseController 
{ 
    // 
    // GET: /Timeregistreringer/ 

    public ActionResult Index() 
    { 
     var approved = TimeregistreringerRepository.FindApproved(); 
     ViewData.Model = approved; 
     ViewData["HelloText"] = Attribute.SayHello(); 

     return View(); 
    } 

    //###THIS WORKS 
    [Dependency] 
    public IHelloWorld Attribute 
    { 
     get;set; 
    } 
    //###END-THIS WORKS### 


    //###PROBLEM ATTRIBUTE, Does not resolve### 
    [Dependency] 
    public ITimeregistreringerRepository TimeregistreringerRepository 
    { 
     get; 
     set; 
    } 
    //###END-PROBLEM### 

    public interface IHelloWorld 
    { 
     string SayHello(); 
    } 

    public class MyHelloWorld : IHelloWorld 
    { 
     public string SayHello() 
     { 
      return "Hello, World!"; 
     } 
    } 
} 

TimeregistreringerRepository의 구현과 같다은 다음과 같습니다

public class TimeregistreringerRepository : RepositoryBase, ITimeregistreringerRepository 
{ 
    public TimeregistreringerRepository(ITimeregEntities entities) : base(entities) 
    { 
    } 

    public IQueryable<Timeregistreringer> FindApproved() 
    { 
     return _entities 
      .FindAll<Timeregistreringer>() 
      .Where(t => t.Godkendt == true); 
    } 
} 

public interface ITimeregistreringerRepository : IRepository 
{ 
    IQueryable<Timeregistreringer> FindApproved(); 
} 

public interface IRepository 
{ 
    void Add<T>(T t) where T : IEntityWithKey; 
} 

public class RepositoryBase : IRepository 
{ 
    protected ITimeregEntities _entities; 
    public RepositoryBase(ITimeregEntities entities) 
    { 
     _entities = entities; 
    } 

    #region IRepository Members 

    public IQueryable<T> FindAll<T>() 
    { 
     return _entities.FindAll<T>(); 
    } 

    public void Add<T>(T t) where T : IEntityWithKey 
    { 
     _entities.Add<T>(t); 
    } 

    #endregion 
} 

오류가 발생했습니다.

종속성을 확인하지 못했습니다. type = "[hidden by me] .MVCWeb.Controllers.TimeregistreringerController", name = "". 예외 메시지 : 현재 빌드 작업 (빌드 키 [[hidden by me] .MVCWeb.Controllers.TimeregistreringerController, null]) 키 실패 : 속성 "TimeregistreringerRepository"의 값을 확인할 수 없습니다. (전략 형 BuildPlanStrategy 인덱스 3) 그래서

는 이제 TimeregistreringerRepository를 입력 레지스터 ITimeregistreringerRepository 할 ) 상기 의존성 주입 (에 있음을 통지하고, 그 클래스 속성에 대한 [종속] 속성이며 내가 놓친 것을 단순히 볼 수는 없습니까? 알아 두어야 할 또 다른 사항은 IHelloWorld 및 MyHelloWorld에 등록한 "Attribute"라는 추가 Attribute를 추가했는데 이것이 완벽하게 작동한다는 것입니다.

시간을내어 주셔서 감사합니다 .--) 귀하의 아이디어와 제안을 기다리십시오!

+0

런타임시 오류가 있음을 언급해야합니다! 이 솔루션은 완벽하게 구축됩니다! – CodeMonkey

답변

0

내 문제는 코드의 다른 부분에서 비롯되었지만 몇 가지 다른 예외로 감싸 졌으므로 문제를 찾기가 매우 어려웠습니다. 이 문맥에서 문제를 설명하는 것은 흥미롭지 않습니다.

+0

문제가 무엇인지 더 설명해 주시겠습니까? 왜냐하면, 이제는 같은 예외에 직면하고 있습니다. 감사합니다 ... – Ravi

+0

내 문제는 내가 Visual Studio에서 예외를 보았다는 것이 었습니다. 프로그램을 계속 실행하게하면 훨씬 좋은 예외 정보를 얻을 수 있습니다. – CodeMonkey