我試圖使用Unity作爲我的IoC容器,「有點」的作品。從Global.asax的依賴注入與Unity和ASP.NET MVC
剪斷:
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);
}
這種關係對我的「Timeregistreringer' - 控制器補充說:
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 =「[由我隱藏] .MVCWeb.Controllers.TimeregistreringerController」,name =「」。異常消息是:當前生成操作(生成密鑰生成密鑰[[由我隱藏] .MVCWeb.Controllers.TimeregistreringerController,null])失敗:屬性「TimeregistreringerRepository」的值無法解析。 (策略類型BuildPlanStrategy,指數3)
現在請注意,在該方法DependencyInjection()我做寄存器ITimeregistreringerRepository鍵入TimeregistreringerRepository,並且有是對類屬性的[依賴]屬性,所以我根本看不到我缺少的東西?另外需要注意的是,我添加了一個名爲「屬性」的屬性,我已經在IHelloWorld和MyHelloWorld中註冊過,並且這個屬性完美無缺。
感謝您花時間閱讀所有這些內容:-)期待您的想法和建議!
我應該提到錯誤是在運行時!該解決方案構建完美! – CodeMonkey 2009-10-18 20:34:51