我们有一个非常大的、复杂的企业应用程序,于2005年开始使用,当时IOC容器在.NET中还没有普及,我们希望对IOC容器进行改造,作为我们迁移到基于RabbitMQ (和easynetq)的完整事件驱动体系结构的一部分。作为一项业务,我们同意这将使我们的商业优势比我们的竞争对手。
我认为重要的是给出一些序言,因为执行战略是关键:
目前,所有依赖项注入都是基于构造函数并手工滚动的:
public sealed class TestCommandHandler
{
private readonly IUnitOfWork _unitOfWork;
private readonly ITestCommandValidator _testCommandValidator;
public TestCommandHandler(IUnitOfWork unitOfWork)
{
this._unitOfWork = unitOfWork;
this._testCommandValidator = new ITestCommandValidator(unitOfWork);
}
public TestCommandHandler(IUnitOfWork unitOfWork, IValidator testCommandValidator)
{
this._unitOfWork = unitOfWork;
this._testCommandValidator = testCommandValidator;
}
}工作单元包含对存储库的访问,这些存储库可以很容易地被模拟:
public class UnitOfWork : IUnitOfWork, IDisposable
{
private IAccountRepository _accountRepository;
public IAccountRepository Account
{
get
{
if(this._accountRepository == null)
{
this._accountRepository = new AccountRepository(this);
}
return this._accountRepository;
}
set
{
this._accountRepository = value;
}
}
//Begin Tx, Commit Tx etc
}目前,所有的测试依赖项都是在调试模式下有条件编译的。发布代码使用非条件代码,我们在其中创建具体的依赖项。最大的对象依赖是UnitOfWork,它通常围绕每个业务事务创建并传递到堆栈中。例如,
using(var unitOfWork = new UnitOfWork())
{
}这通常被包装在另一个也支持IDisposable的类中。我们还计划将AccountID传递到UnitOfWork中,这样我们就可以使用mod函数轻松地对不同的数据库进行分解。
为了转移到依赖框架,我们感觉需要首先对UnitOfWork进行排序,但是我们需要一个初步的步骤。我真的是在寻求关于用这么大的应用程序来实现这一目标的最佳方法的建议。我们计划在圣诞节期间做第一阶段,在那里我们有一个很好的冻结和合并在所有绝望的分支到一个主线分支来进行重大的改变。
我们打开了要使用的依赖注入框架。我们和StructureMap玩过了。我们看到Ninject在Nuget上有很高的下载统计数据,但是阅读它的性能得分很差。我们真的不希望有进一步的迁移过程到另一个依赖注入框架。因此,我们愿意听取建议。这不是一场最好的宗教战争,更重要的是我们有一些东西要迁移到。最重要的要求是它被流畅地配置以避免配置地狱。
我们关注的其他问题是StructureMap术语,即我们如何声明注册中心。我们是否为每个程序集声明注册表?大应用程序中文件夹、类名周围推荐的命名标准吗?我的粗略猜测是,将有大约1000个注册表。另外,对于这样大的代码库扫描策略有什么想法吗?我们应该关心吗?
谢谢你已经准备好了,但是背景很重要,因为这不是10分钟的工作。
休伯特
发布于 2014-10-30 16:14:36
张贴这作为一个答案,但没有正确的你的问题,只是为了克服评论的限制。
为了实现IoC,您在场景中有很多优点:
因此,我将根据你目前的情况,指出几点建议。
那是我的两分钱,希望能帮上忙。
https://stackoverflow.com/questions/26656182
复制相似问题