从...开始
hack---F1----M1----F2 (feature)
/ /
C1-----C2----C3 (master)
Run Code Online (Sandbox Code Playgroud)
我想结束
hack---F1----M1----F2 (feature)
/ /
C1-----C2----C3---F1'---F2' (master)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所拥有的最好的是
git checkout feature
git checkout -b temp
git rebase -i --onto master hack temp
* Big drawback: manually remove the merged-in C2 and C3 from list of commits *
git checkout master
git merge temp
git branch -d temp
Run Code Online (Sandbox Code Playgroud)
我希望有人能回答,即使这是一个可疑的工作流程.
我与refrences如本描述去一个三层应用程序的答案:
DAL with Repositories -> BLL with services and IRepository <- Asp.net mvc-app
Run Code Online (Sandbox Code Playgroud)
为了让这种依赖注入运行,我看到了几个选项:
1.从web-app添加对DAL的引用,以便能够在应用程序启动时设置绑定.
2.使用具有xml配置的容器
(3.使用反射加载dal-assembly并查找类型)
选项1.很简单,也可以将DAL.dll复制到bin但是我突然重新引入了我努力摆脱的引用.现在可以直接访问存储库.选项2和3似乎不必要地复杂.
没有其他办法吗?
在使用Ninject.MVC 2.2.0.3(合并之后)的MVC3应用程序中,而不是将repostories直接注入控制器,我试图创建一个包含businesslogic的服务层并在那里注入repostories.我将ninject-DependencyResolver作为动态对象传递给服务层(因为我不想在那里引用mvc或ninject).然后我在其上调用GetService来获取我在NinjectHttpApplicationModule中指定的绑定和生命周期的存储库.编辑:简而言之,它失败了.
在这种情况下,如何将IoC容器传递给服务层?(不同的方法也非常受欢迎.)
编辑:这是一个例子来说明我如何理解答案和评论.
我应该避免服务定位器(反)模式,而是使用依赖注入.所以我想说我想在Northwind中为产品和类别创建一个管理站点.我根据表定义创建模型,存储库,服务,控制器和视图.此时服务直接调用存储库,没有逻辑.我有功能支柱,视图显示原始数据.这些绑定是为NinjectMVC3配置的:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ICategoryRepository>().To<CategoryRepository>();
kernel.Bind<IProductRepository>().To<ProductRepository>();
}
Run Code Online (Sandbox Code Playgroud)
存储库实例是由ninject通过ProductController中的两层构造函数注入创建的:
private readonly ProductsService _productsService;
public ProductController(ProductsService productsService)
{
// Trimmed for this post: nullchecks with throw ArgumentNullException
_productsService = productsService;
}
Run Code Online (Sandbox Code Playgroud)
和产品服务:
protected readonly IProductRepository _productRepository;
public ProductsService(IProductRepository productRepository)
{
_productRepository = productRepository;
}
Run Code Online (Sandbox Code Playgroud)
我现在没有必要解耦服务,但已准备好模拟数据库.
要在Product/Edit中显示类别下拉列表,我创建一个ViewModel,除了Product之外还包含类别:
public class ProductViewModel
{
public Product Product { get; set; }
public IEnumerable<Category> Categories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ProductsService现在需要CategoriesRepository来创建它.
private readonly ICategoryRepository _categoryRepository; …
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ninject inversion-of-control ninject-2 asp.net-mvc-3
我正在使用System.Data.OracleClient
它按名称进行参数绑定,并验证CommandText和Parameters是否同步:
public string CommandText { get; set; }
public IEnumerable<OracleParameter> Parameters { get; set; }
private void VerifyThatAllParametersAreBound()
{
var variableNames = Regex.Matches(CommandText, ":\\w+")
.Cast<Match>().Select(m => m.Value).ToArray();
var parameteterNames = Parameters.Select(p => p.ParameterName).ToArray();
var unboundVariables = variableNames.Except(parameteterNames).ToArray();
if (unboundVariables.Length > 0)
{
throw new Exception("Variable in CommandText missing parameter: "
+ string.Join(", ", unboundVariables) + ".");
}
var unboundParameters = parameteterNames.Except(variableNames).ToArray();
if (unboundParameters.Length > 0)
{
throw new Exception("Parameter that is not used in CommandText: "
+ string.Join(", …
Run Code Online (Sandbox Code Playgroud) log4net中的有损日志记录非常适合获取事件的详细信息,从而导致错误,并且性能损失最小.然而,在错误之后记录一些消息以验证系统是否按计划处理它通常会很有趣.怎么做到呢?
我的存储库有樱桃选择记录为合并.它抛出了git选择的合并基础.是否可以指定合并基础?如果是这样,怎么样?
示例:f在A处从主人处分支.C被挑选为f,但误导性地作为与K和C合并为父母.
A-B-C master
\ \
K---C'-L f
Run Code Online (Sandbox Code Playgroud)
将f合并到master git时会发现C是最常见的祖先并将其用作Base.由于B包含在Base中,但是在f处丢失,它将被合并撤消.使用A作为基数将给出正确的合并.
编辑:这个答案排除了B计划下面的问题.所以,希望有人可以回答:如何在git merge中指定merge-base?
编辑,计划B:使用tfs-git从两个具有cherry-pick-workflow的tfs-branch中获取存储库.一个变更集的"合并选定范围"显示为git中的完全合并.另一种解决方案是以某种方式配置git-tfs以不创建merge-commits.(暂停采摘樱桃不是一种选择.)