Asp.net mvc 4 结构图与自动注册

Asp.net mvc 4 结构图与自动注册,asp.net-mvc-4,structuremap,Asp.net Mvc 4,Structuremap,我有3个项目: Core(包含存储库、服务等的域模型和接口) 存储库(存储库的具体实现) Web(MVC4项目) 在ObjectFactory内部。初始化我有如下内容: For<IFooRepository>().Use<FooRepository>(); For<IBooRepository>().Use<BooRepository>(); ... ObjectFactory.Initialize(x => x.Scan(s =>

我有3个项目:

Core
(包含存储库、服务等的域模型和接口)
存储库
(存储库的具体实现)
Web
(MVC4项目)

在ObjectFactory内部。初始化我有如下内容:

For<IFooRepository>().Use<FooRepository>();
For<IBooRepository>().Use<BooRepository>();
...
ObjectFactory.Initialize(x => x.Scan(s =>
{
 s.TheCallingAssembly();
 s.LookForRegistries();
}));
For().Use();
For().Use();
...
假设我有50个存储库,这是否意味着我必须编写50行代码(每个具体实现一行)?
StructureMap
是否能够以某种方式找出
foorRepositor
实现
IFooRepositor
接口,并在请求
IFooRepositor
接口时实例化该类


任何帮助都将不胜感激

StructureMap允许您通过扫描程序集并应用约定将接口连接到类型,以编程方式执行此操作。以下是一个例子:

public class RepositoryRegistry : StructureMap.Configuration.DSL.Registry
{
    public RepositoryRegistry()
    {
        Scan(s =>
        {
            s.AssemblyContainingType<ApplicationRepository>();
            s.Convention<TypeNamingConvention>();
        });
    }
}
在初始化时调用注册表,如下所示:

For<IFooRepository>().Use<FooRepository>();
For<IBooRepository>().Use<BooRepository>();
...
ObjectFactory.Initialize(x => x.Scan(s =>
{
 s.TheCallingAssembly();
 s.LookForRegistries();
}));

此约定仅假设您的类型与接口+“I”匹配的标准。希望这能让您继续下去。

这是正确的,但在这种情况下,您不需要创建自己的约定类。在扫描子句中使用WithDefaultConvention。谢谢@JoshuaFlanagan,我不知道你能这么做!