小编Bro*_*ook的帖子

在大型c#应用程序上执行批量命名空间重命名的最佳方法是什么?

首先,一点背景.

目前我们的代码库中的命名空间和程序集(约60个程序集,数千个类)看起来像

WidgetCompany.Department.Something
Run Code Online (Sandbox Code Playgroud)

我们现在已经分拆出来,因此我们正在销售驱动WidgetCompany的软件,因此我们想重命名命名空间和程序集

NewCompany.Something
Run Code Online (Sandbox Code Playgroud)

在正常情况下,我可能只是坚持使用旧命名空间,但问题是我们的客户不希望在应用程序的任何位置看到其竞争对手的名称.如果他们看到堆栈跟踪,装配属性等,它不应该出现.这并不意味着隐藏我们的员工或做任何险恶的事情,我们只需要确保人们知道我们是一个独立的实体,独立的管理,他们不需要担心数据被共享等.

现在的问题.执行此类所有包含重命名的最佳方法是什么?以下内容需要更改:

  • (几乎)应用程序中的每个类的命名空间
  • using应用程序中引用旧名称的每个语句
  • 每个项目的文件夹结构
  • 依赖于更改的文件夹结构的项目之间的引用
  • .sln文件引用已更改的文件夹结构
  • 对完全合格的那些类的任何引用(应该很少和很远)
  • 在xml配置文件中对这些类的任何引用(配置节等)
  • 每个程序集的AssemblyInfo.cs文件
  • 每个.csproj文件中的AssemblyName

我是否坚持使用寻找 - 替换祈祷策略还是有更好的东西?

.net c# refactoring visual-studio

38
推荐指数
5
解决办法
2万
查看次数

使用Ninject填充Log4Net依赖关系

我在我的应用程序中使用Ninject作为DI容器.为了松散地耦合到我的日志库,我使用这样的接口:

public interface ILogger
    {
        void Debug(string message);
        void Debug(string message, Exception exception);
        void Debug(Exception exception);

        void Info(string message);
        ...you get the idea
Run Code Online (Sandbox Code Playgroud)

我的实现看起来像这样

public class Log4NetLogger : ILogger
    {
        private ILog _log;

        public Log4NetLogger(ILog log)
        {
            _log = log;
        }

        public void Debug(string message)
        {
            _log.Debug(message);
        }
        ... etc etc
Run Code Online (Sandbox Code Playgroud)

具有日志记录依赖性的示例类

public partial class HomeController
    {
        private ILogger _logger;

        public HomeController(ILogger logger)
        {
            _logger = logger;
        }
Run Code Online (Sandbox Code Playgroud)

在实例化Log4Net的实例时,您应该为其指定要记录的类的名称.这对Ninject来说是一个挑战.

目标是在实例化HomeController时,Ninject应该使用"HomeController"的"名称"实例化ILog

这是我的配置

public class LoggingModule : NinjectModule
    {
        public override void …
Run Code Online (Sandbox Code Playgroud)

c# log4net ninject

25
推荐指数
4
解决办法
1万
查看次数

加载DOM并使用.Net执行javascript,服务器端

我想使用文档(字符串形式)或URL加载DOM,然后对它执行javascript函数(包括jquery选择器).这将完全是服务器端,正在进行中,没有客户端/浏览器.

基本上我需要加载dom然后使用jquery选择器和text()&type val()函数从中提取字符串.我真的不需要操纵dom.

我看过.Net javascript引擎,如Jurassic和Jint,但都不支持加载DOM,因此不能做我需要的.

我愿意考虑非.Net解决方案(node.js,ruby等),如果它们存在,但我们更喜欢.Net.

编辑 下面是一个很好的答案,但目前我正在尝试不同的路线,我试图将envjs移植到侏罗纪.如果我可以开始工作,我认为它会做我想做的事,请继续关注....

.net javascript jint envjs jurassic

7
推荐指数
1
解决办法
1万
查看次数

从非Web应用程序使用Asp.Net MVC路由(测试)

我正在使用Watin编写specflow测试,用于使用T4MVC的Asp.Net MVC应用程序.

我发现自己在测试中使用了"魔术字符串"网址,这是我不喜欢的.

[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
    string rootUrl = ConfigurationManager.AppSettings["RootUrl"];
    string fullUrl = string.Format("{0}/Authentication/Signup",rootUrl);
    WebBrowser.Current.GoTo(fullUrl);
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用我的T4MVC动作结果,就像我在MVC应用程序中那样,这样的......

[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
    WebBrowser.Current.GoTo(MVC.Authentication.SignUp().ToAbsoluteUrl());
 }
Run Code Online (Sandbox Code Playgroud)

我的ToAbsoluteUrl扩展方法

public static class RouteHelper
{
    private static UrlHelper _urlHelper;
    private static string _rootUrl;

    public static string ToAbsoluteUrl(this ActionResult result)
    {
        EnsureUrlHelperInitialized();

        var relativeUrl = _urlHelper.Action(result);
        return string.Format("{0}/{1}", _rootUrl, relativeUrl);
    }

    private static void EnsureUrlHelperInitialized()
    {
        if (_urlHelper==null)
        {
            _rootUrl …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc bdd watin specflow

5
推荐指数
1
解决办法
958
查看次数