我正在使用structuremap在控制器中注册服务,我也需要在服务中注册存储库。我将如何做到这一点,因为他们是2个不同的项目,需要完全相同的IOC注册。实际上我在表示层使用它并在控制器中注入服务。 我需要知道一个很好的实践方法,使用相同的IOC容器,在两个项目中注入。
答案 0 :(得分:5)
将IOC容器和任何共享服务实现放入另外两个引用的第三个项目(类库)中。
答案 1 :(得分:0)
我倾向于为每个项目保留一个StructureMap注册表,以便他们可以处理自己的配置。然后我的主项目添加对每个依赖项的引用。在我的主要内容中,我通常有一个bootstrapper类,负责创建和配置容器。 (尽可能避免使用静态ObjectFactory。)
public class ApplicationBootstraper
{
public IContainer Container { get; set; }
public ApplicationBootstraper()
{
Container = new Container(x=>
{
x.AddRegistry<SettingsRegistry>();
x.AddRegistry<ProjectRegistry>();
//more registries go here or application specific configuration.
});
}
}
关于让项目依赖于另一个可识别StructureMap的项目。版本2.5.4增加了在当前注册表中包含另一个注册表的功能。
例如,我有一个“Common”项目,我需要依赖它,我可以执行以下操作:
public class ProjectRegistry : Registry
{
public ProjectRegistry()
{
IncludeRegistry<CommonsRegistry>();
Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
}
}
希望这有帮助。