等待满足的依赖性

时间:2011-06-24 18:42:11

标签: asp.net-mvc-3 castle-windsor s#arp-architecture

我正在尝试为一些非常简单的对象抽象一些简单的任务。

在我的域模型中,有许多不同的对象基本上用作标记(分类)“程序”的方法。业务逻辑表示程序可以根据需要包含尽可能多的程序,但是没有相同类型的标签(例如“县”)可以具有相同的名称,并且当程序链接到程序时,您无法删除标记它

这是基于MVC3和S#arp 2.0构建的。

域模型有一个定义的抽象基类NamedEntity : Entity public string Name { get; set; } 等其他属性。

特定类型扩展此类以添加使它们唯一的任何内容(如果有的话),例如Topic,这是一个层次结构,因此具有其他属性。

我想创建INamedEntityTasks<T> where T: NamedEntity然后有一个基本版本,用于处理bool CheckForDuplicateName(string Name)之类的常规任务,这些任务将运行访问其INamedEntityQueries<T>对象并调用T FindByName(string Name)

如果子类需要在删除之前添加更多规则(例如,无法删除子节点的主题),那么它只会覆盖基类中的虚方法。

结构:

  • MyProject.InfrastructureINamedEntityQueries<T>NamedEntityQueries<T>以及ITopicQueries : INamedEntityQueries<Topic>TopicQueries: NamedEntityQueries<T>, ITopicQueries
  • MyProject.Domain.Contracts.TasksINamedEntityTasks<T>ITopicTasks : INamedEntityTasks<Topic>
  • MyProject.TasksNamedEntityTasks<T>TopicTasks: NamedEntityTasks<Topic>, ITopicTasks

我的TopicsController因为缺少依赖而无法运行,我无法理解。

确切的例外是

  

无法创建组件   'MyProject.web.mvc.controllers.topicscontroller'   因为它有依赖性   满意。   MyProject.web.mvc.controllers.topicscontroller   正在等待以下   依赖:

     

服务:    - MyProject.Infrastructure.Queries.ITopicQueries   没有注册。    - MyProject.Domain.Contracts.Tasks.ITopicTasks   这是注册但也是   等待依赖。

     

MyProject.Tasks.TopicTasks正在等待   对于以下依赖项:

     

服务:    - MyProject.Infrastructure.Queries.INamedEntityQueries`1 [[MyProject.Domain.Topic,   MyProject.Domain,版本= 1.0.0.0,   Culture = neutral,PublicKeyToken = null]]   没有注册。

我使用断点查看了container中的ComponentRegistrar,并显示3个可能配置错误的内容:

"MyProject.Tasks.NamedEntityTasks`1" NamedEntityTasks`1
"MyProject.Tasks.TopicTasks" ITopicTasks / TopicTasks
"MyProject.web.mvc.controllers.topicscontroller" TopicsController`TopicsController`

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您不需要IFooTasks接口,只需使用抽象基类,然后IFooBarTasks和IFooBazTasks将通过S#arp架构中的标准ComponentRegistrar在Castle Windsor注册:

public abstract class Foo
{
  public void Foo1();

  public void Foo2();
}

public class FooBar : Foo
{
  public void FooBar1();
}

public class FooBaz : Foo
{
  public void FooBaz1();
}

public interface IFooTasks
{
  void Foo1();

  void Foo2();
}

public interface IFooBarTasks : IFooTasks
{
  void FooBar1();
}

public interface IFooBazTasks : IFooTasks
{
  void FooBaz1();
}

public abstract class FooTasks : IFooTasks
{
  public void Foo1()
  {
    // Foo1 implementation
  }

  public void Foo2()
  {
    // Foo2 implementation
  }
}

public class FooBarTasks : FooTasks, IFooBarTasks
{
  public void FooBar1()
  {
    // FooBar1 implementation
  }
}

public class FooBazTasks : FooTasks, IFooBazTasks
{
  public void FooBaz1()
  {
    // FooBaz1 implementation
  }
}
相关问题