Asp.net mvc 4 结构图与自动注册
我有3个项目: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 =>
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,我不知道你能这么做!