2015-04-15 56 views
1

我是一家公司的實習生,我的任務是爲他們提供一個工作的門戶網站。因爲我是一名實習生,所以我的技能還沒有那麼先進,所以他們聘請了一位將與我們合作的高級開發人員。他建立了我們的項目結構等等。他告訴我們與AutoFac合作開發DI,但我對此並不熟悉。這傢伙現在正在度假,所以他不能真正幫助我們。無法找到類型'projectname.Repositories.IRepository'。它可能需要組裝資格,例如「MyType,MyAssembly」

當使用Autofac我得到這個錯誤,我不知道如何解決它..

The type 'projectnamespace.Repositories.IRepository' could not be found. It may require assembly qualification, e.g. "MyType, MyAssembly". enter image description here

我的Global.asax.cs

 var builder = new ContainerBuilder(); 

     //register types from configuration 
     builder.RegisterModule(new ConfigurationSettingsReader()); 
     // Register your MVC controllers. 
     builder.RegisterControllers(Assembly.GetExecutingAssembly()); 

     // Set the dependency resolver to be Autofac. 
     var container = builder.Build(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

的Web.config

<autofac> 
    <components> 
    <component 
     type="projectnamespace.Repositories.OrderRepository, projectnamespace" 
     service="projectnamespace.Repositories.IRepository" /> 
    </components> 
</autofac> 

IRepository.cs

public interface IRepository 
{ 
    string FetchAll(); 
} 

OrderRepository.cs

public class OrderRepository : IRepository 
{ 
    public string FetchAll() 
    { 
     return "return something"; 
    } 
} 

和最後但並非最不重要的HomeController

private readonly IRepository _repository; 

    public HomeController(OrderRepository repo) 
    { 
     _repository = repo; 
    } 

    [HttpGet] 
    public ActionResult Index() 
    { 
     ViewBag.Data = _repository.FetchAll(); 
     return View(); 
    } 

任何幫助都將不勝感激。

回答

1

該錯誤表示Autofac無法找到承載IRepository類型的程序集。

要解決這個問題,您必須指定從哪裏找到您的autofac配置中的類型。您可以通過在service屬性上指定程序集名稱來完成此操作。語法是namespace.typeName,的AssemblyName

<autofac> 
    <components> 
    <component 
     type="projectnamespace.Repositories.OrderRepository, assemblyName" 
     service="projectnamespace.Repositories.IRepository, assemblyName" /> 
    </components> 
</autofac> 

在你的情況,似乎的AssemblyNamePROJECTNAME

+0

由於這個固定的上述錯誤。現在我得到一個新的錯誤: 在'projectnamespace.Controllers.HomeController'類型的'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'中找到的構造函數都不能用可用的服務和參數調用: –

+0

更多來自錯誤stack:無法解析構造函數'Void .ctor(Go4Logistics.Tms.Portal.Web.Repositories.OrderRepository)'的參數'projectnamespace.Repositories.OrderRepository repo''。 –

+0

您必須在* Autofac *中註冊'OrderRepository'。我建議閱讀一些介紹文章來理解依賴注入的關鍵概念,它將幫助你解決進一步的問題 –

相關問題