我正在尝试为一些非常简单的对象抽象一些简单的任务。
在我的域模型中,有许多不同的对象基本上用作标记(分类)“程序”的方法。业务逻辑表示程序可以根据需要包含尽可能多的程序,但是没有相同类型的标签(例如“县”)可以具有相同的名称,并且当程序链接到程序时,您无法删除标记它
这是基于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.Infrastructure
有INamedEntityQueries<T>
和NamedEntityQueries<T>
以及ITopicQueries : INamedEntityQueries<Topic>
和TopicQueries: NamedEntityQueries<T>, ITopicQueries
MyProject.Domain.Contracts.Tasks
有INamedEntityTasks<T>
和ITopicTasks : INamedEntityTasks<Topic>
MyProject.Tasks
有NamedEntityTasks<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`
任何帮助都将不胜感激。
答案 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
}
}