我有一个应用程序,我正在尝试使用至少一个名义上的DDD类型域模型,并正在努力与某一块.
我的实体有一些业务逻辑,它使用我目前在某些域服务中的一些财务计算和速率计算,以及我在一个值对象中放置的一些常量值.
我正在努力解决如何让实体使用域服务中的逻辑,或者这些服务中的逻辑是否属于那里.这是我到目前为止:
public class Ticket
{
public Ticket(int id, ConstantRates constantRates, FinancialCalculationService f, RateCalculationService r)
{
Id = id;
ConstantRates = constantRates;
FinancialCalculator = f;
RateCalculator = r;
}
private FinancialCalculationService FinancialCalculator { get; set; }
private RateCalculationService RateCalculator { get; set; }
private ConstantRates ConstantRates { get; set; }
public int Id { get; private set; }
public double ProjectedCosts { get; set; }
public double ProjectedBenefits { get; set; }
public double CalculateFinancialGain()
{
var discountRate = …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个新的.NET库供我公司内部使用,它将通过依赖注入使用IoC.当然,如果我们使用IoC容器来解析实例,这个库将更容易使用.
但是,将调用此库的代码当前不使用任何类型的依赖注入,并且重构遗留代码以使用DI超出了我的项目的范围.那么,在这个遗留代码中开始使用Container从我的新库中获取实例的最佳方法是什么?
如果可能的话,我想避免乱丢遗留代码,硬编辑我选择的任何IoC容器.由于我对DI比较陌生,所以我们有可能会改变我们想要在某个时刻使用哪个Container的想法.
如果我将我的容器包装在CodePlex上的CommonServiceLocator库之类的东西上,这是一种合理的方法吗?
其他人做了什么?
我有一个TFS环境,具有以下分支设置
我们正在努力使用Nuget,我想配置这样的东西,使得Dev分支中的代码从'Dev'nuget存储库中提取包,从'Main'获取主要包,等等.
现在,我已经想到了一些事情,我有一个文件坐在我的分支根,告诉nuget.exe使用哪个存储库.
我现在正试图弄清楚如何在每个分支中使这些文件的内容不同.我可以单独检查它们到每个分支,但这会引入从Dev-> Main和Main-> HotFix合并的问题.
所以,我认为我想要做的是以某种方式将这个特定的配置文件排除在Dev-> Main等的合并之外.任何方法都可以做到这一点?
或者,或者,还有其他一些方法来完成我想要用Nuget做的事情,在指向不同分支的不同nuget存储库方面?
我在一个类中有一些代码,它爬行堆栈跟踪以在其调用堆栈中的方法上查找特定属性.
我注意到我的一个测试开始从自动构建失败,当时该测试总是从我的机器传递出来.当我深入研究它时,看起来有问题的代码在调试模式或发布模式下工作正常,只要你连接了调试器,但在没有调试器的发布模式下失败.
从我所看到的,我正在寻找的方法是内联,当发生这种情况时,该方法的属性将丢失.
是这样的吗?属性是否在那时丢失了?
这是一个重现我的问题的小应用程序:
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
namespace InliningAndAttributes
{
public class SomeClass
{
[Description("Foo")]
public void SomeMethodThatWillGetInlined()
{
SomeMethodThatWontGetInlined();
}
protected virtual void SomeMethodThatWontGetInlined()
{
var caller = FindDescribedCaller();
Console.WriteLine("Could I find description attribute? {0}", caller != null);
}
private MethodBase FindDescribedCaller()
{
var callStack = new StackTrace();
int frameIndex = 0;
while (frameIndex++ <= callStack.FrameCount)
{
Console.WriteLine("Getting frame" + frameIndex);
var currentFrame = callStack.GetFrame(frameIndex);
if (currentFrame == null)
{
continue;
}
var …
Run Code Online (Sandbox Code Playgroud)