创建WindsorContainer会导致类型转换错误

时间:2010-11-05 03:27:07

标签: asp.net-mvc inversion-of-control castle-windsor

我正在尝试关注书籍:Pro ASP.NET MVC Framework by Steven Sanderson ...

container = new WindsorContainer(xi);行会产生此错误:

  

无法从'DomainModel.Abstract.IPeopleRepository,DomainModel'转换为System.Type - 可能无法找到类型**

public WindsorControllerFactory()
{
    ConfigResource confres = new ConfigResource("castle");

    XmlInterpreter xi = new XmlInterpreter(confres);

    container = new WindsorContainer(xi);

    // Also register all the controller types as transient
    var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
                          where typeof(IController).IsAssignableFrom(t)
                          select t;

    foreach (Type t in controllerTypes)
    {
        container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);
    }
}

城堡配置:

  <castle>
    <components>
      <component id="PeopleRepository"
                 service="DomainModel.Abstract.IPeopleRepository, DomainModel"
                 type="DomainModel.Concrete.FakePeopleRepository, DomainModel" 
                 >

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

桑德森关于MVC-Windsor集成的书已经过时了。不要编写自己的(或书籍)控制器工厂的代码。请改用MVCContrib的Windsor集成。

此外,在控制器工厂内注册控制器是不好的做法。控制器工厂用于实例化控制器,而不是管理容器注册。

更新:ASP.NET MVC 3的MvcContrib删除了所有控制器工厂,并弃用了所有IoC集成。

答案 1 :(得分:1)

我将丢失空的PeopleController构造函数