小编Rub*_*ink的帖子

自动创建包装器以实现接口

我有一些类没有实现某个接口,但在结构上符合该接口.

interface IFoo {
    void method();
}

class Bar {  // does not implement IFoo
   public void method() {...}
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以围绕那些简单地委托给包装类的类编写一个包装器

class BarWrapper : IFoo {
   Bar bar = new Bar();
   public void method()
   {
      bar.method();
   }
}
Run Code Online (Sandbox Code Playgroud)

但那是很多繁琐的工作.那些包装类可以自动生成吗?就像是:

IFoo foo = CreateWrapper<IFoo>(new Bar());

我相信你可以用Reflection.Emit做到这一点,但我从来没有用过它,乍一看它看起来并不容易.

有没有更简单的方法,或者是否有一个库已经实现了这个?

c# wrapper

16
推荐指数
4
解决办法
8030
查看次数

F#收益!operator - 实现和可能的C#等价物

我正在学习F#,我真的很喜欢yield!(yield-bang)运算符.不仅因为它的名字,而且它当然也是它的作用.

yield!操作者基本上可以让你产生序列的所有元素从一个序列的表达.这对于编写枚举器很有用.由于我经常遇到大而复杂的调查员,我对策略很感兴趣,我们可以用它来分解它们,并从简单的枚举器中编写它们.

不幸的是,yield!C#中没有运营商.据我了解,它的作用就像一foreach (var x in source) yield x;本书,但我正在阅读的书(Petricek的真实世界F# - Manning)表明它有更好的表现......

  • 那么F#编译器到底在做什么呢?(是的,我也可以使用Reflector来查看它,但我希望对机制有更详细的描述).

为了在C#中实现类似的构造,我已经探索了多种方式,但是它们都没有像yield!运算符那样简洁,我也不确定它们的复杂性.如果我的BigO号码正确,有人可以提供输入吗?

  • 将枚举器分解为多个私有枚举器,然后从公共枚举器中生成每个元素:

    foreach (var x in part1()) yield x
    foreach (var x in part2()) yield x
    
    Run Code Online (Sandbox Code Playgroud)

    这将有效地导致每个元素的"双倍收益".那是O(2n)吗?(或者可能更糟?)无论如何,使用这种方法阻止我使用yield break;我的任何子部分.

  • 将枚举器分解为多个私有枚举器,然后从公共枚举器中连接所有私有枚举器:

    return part1().Concat(part2())
    
    Run Code Online (Sandbox Code Playgroud)

    我相信这与上述解决方案没有什么不同,因为它Concat()是按照我上面概述的方式实现的.

还有其他选择吗?

c# ienumerable f# yield enumerators

15
推荐指数
2
解决办法
4534
查看次数

如何在NSubstitute中使用AutoFixture的示例

我经常使用NSubstitute.我喜欢它.

我只是在研究AutoFixture.看起来很棒!

我见过NSFstitute的AutoFixture,并在Moq中看到了一些如何使用此功能的例子.

但我似乎无法将其翻译成NSubstitute.

我试过这个:

var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());  
var addDest = Substitute.For<IPerson>();
Run Code Online (Sandbox Code Playgroud)

使用:

public interface IPersonEntity
{    
   int ID { get; set; }
   string FirstName { get; set;}
   string LastName { get; set;}
   DateTime DateOfBirth { get; set; }
   char Gender { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

我得到一个对象,但没有填充任何属性(类似于AutoFixture的点).

我也尝试过:

var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
var result = fixture.Create<IPersonEntity>();
Run Code Online (Sandbox Code Playgroud)

这也给了我一个没有填充属性的对象.(请注意,如果我使用PersonEntity类进行上述操作,则会填充属性.)

我确信有一种方法可以使这项工作,但我似乎无法找到它.

那么,鉴于我的IPersonEntity界面,有没有人知道如何使用AutoFixture和NSubstitute给我一个填充的IPersonEntity对象?

.net c# autofixture nsubstitute

15
推荐指数
2
解决办法
6489
查看次数

使用json.net在序列化期间合并两个对象?

我遇到了以下情况,有人可以帮我实现如下吗?

例如,如果我有这个类: -

public class Sample
{
    public String name {get;set;}
    public MyClass myclass {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

Myclass将如下:

public class MyClass
{
    public String p1 {get;set;}
    public String p2 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

当我使用Json.net序列化类Sample的对象时,我得到如下,它运行良好.

{
 "name":"...",
 "myclass":
          {
            "p1":"...",
            "p2":"..."
           }
 }
Run Code Online (Sandbox Code Playgroud)

它是正确的,但我想知道是否有可能得到如下的json字符串?

{
 "name":"...",
 "p1":"...",
 "p2":"..."
}
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net

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

解决Module类中的AutoFac依赖项

我是AutoFac的新手,目前我在app app中使用自定义模块来启动一些核心F#系统.我正在使用的代码是

var builder = new ContainerBuilder();
builder.RegisterType<DefaultLogger>().As<IDefaultLogger>();
builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
builder.Build();
Run Code Online (Sandbox Code Playgroud)

在我的app配置中,我有适当的逻辑来启动相关系统.我想访问我的模块中的DefaultLogger.Module基类的元数据有以下选项可供我使用:

protected virtual void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration);

protected virtual void AttachToRegistrationSource(IComponentRegistry componentRegistry, IRegistrationSource registrationSource);

public void Configure(IComponentRegistry componentRegistry);

protected virtual void Load(ContainerBuilder builder);
Run Code Online (Sandbox Code Playgroud)

到目前为止我只使用Load,我在构建器上看不到任何允许我进入日志记录服务的方法.

c# dependency-injection autofac

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

为方法创建IObservable的好方法是什么?

比方说,我们有一个班级:

public class Foo
{
   public string Do(int param)
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个由Do方法生成的值的可观察值.一种方法是创建一个从Do调用的事件,并使用Observable.FromEvent创建observable.但不知何故,为了完成任务,我对创建一个事件并不感到满意.有没有更好的方法呢?

c# system.reactive

14
推荐指数
1
解决办法
5612
查看次数

获取ASP.NET MVC中当前操作/控制器的自定义属性列表

查看为ASP.NET MVC2编写的http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc中的示例代码,我注意到他们可以检查自定义属性是否为通过访问filterContext.ActionDescriptorfilterContext.ActionDescriptor.ControllerDescriptor分别应用于当前操作或控制器:

public class ExitHttpsIfNotRequiredAttribute : FilterAttribute, IAuthorizationFilter {
    public void OnAuthorization(AuthorizationContext filterContext) {
        // snip

        // abort if a [RequireHttps] attribute is applied to controller or action
        if(filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
        if(filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;

        // snip
    }
}
Run Code Online (Sandbox Code Playgroud)

检查自定义属性的操作和控制器的ASP.NET MVC 1方法是什么?在ASP.NET MVC 1中filterContext.ActionDescriptor,我无法分辨.

asp.net-mvc custom-attributes authorize-attribute

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

在Ninject 2中注入HttpContext

在我的asp.net mvc应用程序中,我使用Ninject作为DI框架.

我的控制器使用我的HttpAccountService从cookie获取信息.为此,我需要HttpAccountService中的HttpContext.Current.由于这是一个依赖项,我通过构造函数注入它:

kernel.Bind<IAccountService>()
    .To<HttpAccountService>()
    .InRequestScope()
    .WithConstructorArgument("context", HttpContext.Current);
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这总是绑定到相同的上下文,这使得在第一个请求完成后,这个上下文变得过时了.

我应该如何正确地注入我的HttpContext?

dependency-injection ninject httpcontext

14
推荐指数
1
解决办法
3670
查看次数

为什么部分方法必须无效?

我目前正在学习C#,这本书名为Beginning Visual C#2010,我在讨论部分方法和类的不同方面和特征的章节中.

引用这本书:

在这一点上考虑为什么部分方法不能具有返回类型.如果您能够自己满意地回答这个问题,那么您可以确信您完全理解了这个主题 - 所以这是留给您的练习."

这是我被卡住的地方.我能想到的唯一原因是,当方法的返回值被分配给代码中的某些内容时,如果没有为partial方法实现定义,则会产生错误.

有人可以帮我清楚这个话题吗?

c#

14
推荐指数
1
解决办法
870
查看次数

xUnit.net v2未在Visual Studio 2015中发现.NET核心测试

我真的很沮丧这个问题.我已经尝试更改版本号,但测试资源管理器中没有显示任何测试.

在测试输出窗口中,我可以看到此输出

Starting Microsoft.Framework.TestHost [C:\Users\sul\.dnx\runtimes\dnx-clr-win-x86.1.0.0-beta4\bin\dnx.exe --appbase "path to test project" Microsoft.Framework.ApplicationHost --port 63938 Microsoft.Framework.TestHost --port 63954 list ]
Unable to start Microsoft.Framework.TestHost
========== Discover test finished: 0 found (0:00:36.5471185) ==========
Run Code Online (Sandbox Code Playgroud)

这是如此脆弱,有时测试显示然后他们消失了.重启VS没有帮助,重新安装xunit/xunit运行器也没有帮助.

在另一个测试项目中,我得到了不同的输出,但仍未显示测试

Starting Microsoft.Framework.TestHost [C:\Users\sul\.dnx\runtimes\dnx-clr-win-x86.1.0.0-beta4\bin\dnx.exe --appbase "path to project" Microsoft.Framework.ApplicationHost --port 63938 Microsoft.Framework.TestHost --port 64421 list ]
Connected to Microsoft.Framework.TestHost
Discovering tests in 'path to project\project.json'
========== Discover test finished: 0 found (0:00:35.9341416) ==========
Run Code Online (Sandbox Code Playgroud)

这是我的project.json的一部分

"commands": {
    "test": "xunit.runner.dnx"
  },
  "dependencies": {
    "Microsoft.AspNet.Http": "1.0.0-*",    
    "Microsoft.AspNet.Http.Core": "1.0.0-*",
    "Microsoft.AspNet.TestHost": "1.0.0-*",    
    "Moq": "4.2.1502.911", …
Run Code Online (Sandbox Code Playgroud)

xunit visual-studio-2015 .net-core dnx xunit2

14
推荐指数
2
解决办法
3175
查看次数