找不到类型'projectname.Repositories.IRepository'。它可能需要装配认证,例如“MyType,MyAssembly”

时间:2015-04-15 10:05:46

标签: c# asp.net-mvc dependency-injection autofac

我是公司的实习生,我的任务是为他们提供一个有效的门户网站。由于我是一名实习生,我的技能水平尚未提升,因此他们聘请了一位将与我们合作的高级开发人员。他建立了我们的项目结构等......他告诉我们要与AutoFac合作进行DI,但我对此并不熟悉。这家伙现在正在度假,所以他无法帮助我们。

使用Autofac时出现此错误,我不知道如何解决此问题。

  

类型' projectnamespace.Repositories.IRepository'不可能   找到。它可能需要装配认证,例如"的MyType,   MyAssembly程序&#34 ;.   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 个答案:

答案 0 :(得分:1)

错误意味着 Autofac 无法找到托管IRepository类型的程序集。

要解析它,您必须指定在 autofac 配置中找到类型的位置。您可以通过在service属性上指定程序集名称来完成此操作。语法是 namespace.typeName,assemblyName

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

在您的情况下,似乎 assemblyName projectName