"약간"작동하는 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를 추가했는데 이것이 완벽하게 작동한다는 것입니다.
시간을내어 주셔서 감사합니다 .--) 귀하의 아이디어와 제안을 기다리십시오!
런타임시 오류가 있음을 언급해야합니다! 이 솔루션은 완벽하게 구축됩니다! – CodeMonkey