2009-10-18 146 views
0

我試圖使用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中註冊過,並且這個屬性完美無缺。

感謝您花時間閱讀所有這些內容:-)期待您的想法和建議!

+0

我應該提到錯誤是在運行時!該解決方案構建完美! – CodeMonkey 2009-10-18 20:34:51

回答

0

我的問題源於代碼中的其他地方,但已包裝在其他幾個例外中,因此很難找到問題。在這種情況下描述這個問題並不令人感興趣。

+0

請問你能解釋一下問題是什麼?因爲,現在我面臨着同樣的例外。謝謝... – Ravi 2009-11-03 05:07:24

+0

我的問題是我查看了Visual Studio中的異常。如果我讓程序繼續運行,我會得到一些更好的異常信息。 – CodeMonkey 2009-11-09 00:32:59