小编Aar*_*ell的帖子

反思和泛型类型

我正在为类构造函数编写一些代码,它循环遍历类的所有属性,并调用一个通用的静态方法,该方法使用外部API中的数据填充我的类.所以我把它作为一个示例类:

public class MyClass{
  public string Property1 { get; set; }
  public int Property2 { get; set; }
  public bool Property3 { get; set; }

  public static T DoStuff<T>(string name){
    // get the data for the property from the external API
    // or if there's a problem return 'default(T)'
  }
}
Run Code Online (Sandbox Code Playgroud)

现在在我的构造函数中我想要这样的东西:

public MyClass(){
  var properties = this.GetType().GetProperties();
  foreach(PropertyInfo p in properties){
    p.SetValue(this, DoStuff(p.Name), new object[0]);
  }
}
Run Code Online (Sandbox Code Playgroud)

所以上面的构造函数会抛出一个错误,因为我没有提供泛型类型.

那么如何传入属性的类型呢?

.net c# generics reflection

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

OWIN为多个路由发送静态文件

我正在制作一个位于ASP.Net WebAPI之上的SPA.我正在等待使用HTML5历史记录而不是#/历史路由,但是这会给深度链接带来问题,我需要确保/并且/foo/bar都返回相同的HTML文件(我的JS将呈现SPA的正确部分).

如何让OWIN/Katana为多个不同的网址返回相同的HTML文件?

c# single-page-application owin katana

12
推荐指数
1
解决办法
4051
查看次数

将DateTimeOffset作为WebAPI查询字符串传递

我有一个WebAPI动作,如下所示:

[Route("api/values/{id}")]
public async Task<HttpResponseMessage> Delete(string id, DateTimeOffset date) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是当我从一个HttpClient实例调用它时,创建一个如下的URL:

string.Format("http://localhost:1234/api/values/1?date={0}", System.Net.WebUtility.UrlEncode(DateTimeOffset.Now.ToString()));
// -> "http://localhost:1234/api/values/1?date=17%2F02%2F2015+7%3A18%3A39+AM+%2B11%3A00"
Run Code Online (Sandbox Code Playgroud)

我得到一个400回复,说date不可存在的参数不存在.

我也尝试将该[FromUri]属性添加到参数中,但它仍然没有映射.如果我将其更改为DateTimeOffset?我可以看到它保留为null并且查看Request.RequestUri.Query值是否存在,只是没有映射.

最后,我尝试不做一个WebUtility.UrlEncode,它没有任何不同.

.net c# asp.net-web-api

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

模拟方法的结果

我试图找到一种方法来伪造从另一个方法中调用的方法的结果.

我有一个"LoadData"方法,它调用一个单独的帮助器来获取一些数据然后它将转换它(我有兴趣测试转换后的结果).

所以我有这样的代码:

public class MyClass(){
  public void LoadData(){
    SomeProperty = Helper.GetSomeData();
 }
 public object SomeProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我想从Helper.GetSomeData()方法获得已知结果.我可以使用一个模拟框架(我对Rhino Mocks的经验相当有限,但我愿意接受任何事情)来强制实现预期的结果吗?如果是这样,怎么样?

*编辑 - 是的,如我所料,我无法实现我想要的黑客攻击,我将不得不找到一种更好的方法来设置数据.

c# rhino-mocks mocking

9
推荐指数
3
解决办法
4747
查看次数

MVP模式,主持人有多少观看次数?

我们正在尝试使用(几乎)所有新开发工作中使用的Model-View-Presenter模式.

我坚信有一个框架可以帮助人们满足设计要求,我们有一些内部框架可以用于各种不同的组件(日志记录,电子邮件发送等),所以我试图获得某种MVP框架开发.

我已经设法将一些易于使用的东西放在那些不熟悉MVP并且与我们目前的工作方式相差不远的人身上.问题在于它正在与1个演示者建立1个视图的关系.

这是框架的大致轮廓:

public abstract class Presenter<TView> where TView : IView {
  public virtual T View { get; set; }

  public virtual void Setup(TView view) {
    this.View = view; 
  }
}

public interface IView { }
Run Code Online (Sandbox Code Playgroud)

它的基本工作方式是创建的任何View都继承自IView接口,并传递给继承自抽象类的PresenterPresenter类.

正如您所看到的,我正在使用.NET泛型,以便开发人员在处理演示者时可以强大地键入View(最后是从演示者继承的类).

所以我可以像这样设置一个基本的登录组件:

public class Login : Presenter<ILogin> {
  public override Setup(ILogin view){
    base.Setup(view);
    this.View.Login += new EventHandler(login);
  }
  void login(object sender, EventArgs e) { ... }
}

public interface ILogin : IView { …
Run Code Online (Sandbox Code Playgroud)

.net mvp

9
推荐指数
1
解决办法
7579
查看次数

MSBuild任务执行外部MSBuild文件

我正在尝试设置一个MSBuild文件,它将调用另一个MSBuild文件,我想知道实现这个目标的最佳方法是什么.

我们在构建服务器下载MSBuild文件的场景中使用它,然后根据参数执行相应的第二个文件.

我知道我可以使用这个<Exec Command="msbuild.exe ..." />任务,但这似乎是一种做得起来的hacky方式.

有没有更简单的方法来使用MSBuild执行另一个MSBuild文件?

msbuild

9
推荐指数
2
解决办法
9440
查看次数

将knockoutjs连接到已填充的DOM元素

我正在开发一个页面,它是一个ASP.NET MVC3应用程序的服务器,我想在其中使用KnockoutJS.

在View上我已经传递了一个填充的模型(我正在转换为KnockoutJS viewModel),我想构建一些DOM服务器端.这似乎是合乎逻辑的,因为我已经有了生成初始HTML的对象,它将为用户提供更好的体验,因为页面加载和DOM填充之间不会有延迟(这也意味着我有非基本功能) -JavaScript客户端).

做了一些研究后,我假设我需要创建一个自定义,bindingHandler所以我创建了这个:

ko.bindingHandlers.serverForEach = {
    init: function() { /* no-op */ },
    update: function() {
        //call off to the built in loop handler
    }
};
Run Code Online (Sandbox Code Playgroud)

所以我的想法是我创建了一个处理程序,它在init阶段中没有做任何事情(因为已经填充了DOM),并且在update阶段I中我只是插入新值.我想利用内置的模板,这也是一个通用的解决方案.

问题是在这种情况下一切都崩溃了.如果init什么都不做,则update失败,因为作为最后一个参数进入的bindingContext似乎是错误的,如果我包含init它将破坏现有的HTML.

任何人都试过这个/知道我应该做些什么来支持这种情况,或者它与你能做什么/应该做的太远了?

此外,我不希望为服务器生成的HTML提供单独的DOM元素而不是Knockout HTML.

knockout.js

9
推荐指数
1
解决办法
1864
查看次数

每个命名空间不同的appender

我正在尝试建立一个公共日志库,它ILog根据当前堆栈确定实例,以及使用ILog的最佳实例.

我的配置设置如下:

<log4net>
  <!-- appenders omitted -->
  <root></root>

  <logger name="MyAssembly.MyNamespace">
    <level value="WARN" />
    <!-- appender list -->
  </logger>
</log4net>
Run Code Online (Sandbox Code Playgroud)

我有一个这样的课:

namespace MyAssembly.MyNamespace.SubNamespace {
  public class MyClass { ... } 
}
Run Code Online (Sandbox Code Playgroud)

当我尝试获取ILog我传入type(var log = LogManager.GetLogger(typeof(MyClass)).Namespace);)的实例时,我希望它检测到没有配置任何记录器,因此它将在命名空间树(to MyAssembly.MyNamespace)中上升一级,然后查看是否在那一点配置.

问题是ILog返回的for MyAssembly.MyNamespace.SubNamespace配置为WARN事件(及以上),基本上是我为它的父配置.ILog当所需名称包含已定义的名称时,Log4net似乎正在返回,而不是等于名称时.

当名称与配置中定义的名称相同时,如何让Log4net仅返回有效的记录器?

log4net

8
推荐指数
1
解决办法
9389
查看次数

.NET中的MD5生成有多贵?

要与外部数据源进行交互,我需要传递一个已经过MD5哈希的滚动安全密钥(我们每天需要生成一个新的MD5哈希密钥).

我是否在每次调用外部馈送时都要进行交易.我需要有一个大约10个字符的字符串作为Feed.

它适用于ASP.NET(C#/ .NET 3.5)站点,并且几乎每个页面都使用了feed.我最好每天生成一次哈希值,然后将其存储在应用程序缓存中,并记录内存,或者在每次请求时生成内存吗?

.net c# asp.net performance md5

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

在watchify运行之前运行eslint

我正在添加watchify到我们的构建过程中,但我想提出一个前提条件来监视运行,那就是更改的文件通过了我们的linting步骤(正在使用ESLint).

我在想这样做:

function runBrowserify(watch){
  var babel = babelify.configure({
      optional: ['es7.objectRestSpread']
  });
  var b = browserify({
    entries: './app/main.js',
    debug: true,
    extensions: ['.jsx', '.js'],
    cache: {},
    packageCache: {},
    fullPaths: true
  })
  .transform(babel);

  if(watch) {
    // if watch is enable, wrap this bundle inside watchify
    b = watchify(b);
    b.on('update', function(ids) {
      //run the linting step
      lint(ids);

      //run the watchify bundle step
      gutil.log(gutil.colors.blue('watchify'), 'Started');
      bundleShare(b);
    });
    b.on('time', function (time) {
      gutil.log(gutil.colors.blue('watchify'), 'Finished', 'after', gutil.colors.magenta(time), gutil.colors.magenta('ms'));
    });
  }

  bundleShare(b);
}

function …
Run Code Online (Sandbox Code Playgroud)

browserify eslint gulp watchify

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