考虑到以下架构,我想知道如何处理依赖注入。
我有3个项目
MyProject.UI
MyProject.Business
MyProject.SomeOtherThing
StructureMap用于MyProject.UI
中的依赖注入。
public static class Bootstrapper
{
public static void Run()
{
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
ObjectFactory.Initialize(x =>
{
x.For<ISomeClass>().Use<SomeClass>();
}
}
}
我的问题是,MyProject.SomeOtherThing中有一些由MyProject.Business
使用的类。这些类设置为使用DI。
namespace MyProject.SomeProject
{
public SomeClass
{
public ISomeDependency SomeDependency { get; set; }
public SomeClass (ISomeDependency someDependency)
{
SomeDependency = someDependency;
}
}
}
业务层使用该类并公开使用SomeClass
SomeService
的服务。
要使DI注册生效,MyProject.UI
必须引用MyProject.SomeOtherThing
。
我想避免这种情况。理想情况下,UI项目只能引用MyProject.Business
。
处理这种情况的最佳方法是什么?是否将DI配置移到MyProject.Business
?或者还有其他我想念的东西?
谢谢!
答案 0 :(得分:2)
我们创建了一个新项目“Binding”,它引用了所有内容并具有Ninject绑定。这样,您的UI项目只需要知道Business层和Binding层,而不是SomeOtherThing层。
答案 1 :(得分:1)
我在当前项目中遇到了同样的问题,因为我有一个用于UI项目的核心程序集(asp.net MVC,asp.net web api和asp.net mvc在单独的程序集中的便携式数据集),所以我决定把我的所有配置都放在我的Web.Core程序集中。没有其他办法可以处理它。
现在您的情况下,如果您不需要MyProject.SomeOtherThing
,则无需引用MyProject.UI
,应用程序的DI配置的最佳位置是MyProject.Business
。你只需要在MyProject.UI
中注册配置,这就是全部