我有一些类没有实现某个接口,但在结构上符合该接口.
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做到这一点,但我从来没有用过它,乍一看它看起来并不容易.
有没有更简单的方法,或者是否有一个库已经实现了这个?
我正在学习F#,我真的很喜欢yield!(yield-bang)运算符.不仅因为它的名字,而且它当然也是它的作用.
的yield!操作者基本上可以让你产生序列的所有元素从一个序列的表达.这对于编写枚举器很有用.由于我经常遇到大而复杂的调查员,我对策略很感兴趣,我们可以用它来分解它们,并从简单的枚举器中编写它们.
不幸的是,yield!C#中没有运营商.据我了解,它的作用就像一foreach (var x in source) yield x;本书,但我正在阅读的书(Petricek的真实世界F# - Manning)表明它有更好的表现......
为了在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()是按照我上面概述的方式实现的.
还有其他选择吗?
我经常使用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对象?
我遇到了以下情况,有人可以帮我实现如下吗?
例如,如果我有这个类: -
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) 我是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,我在构建器上看不到任何允许我进入日志记录服务的方法.
比方说,我们有一个班级:
public class Foo
{
public string Do(int param)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个由Do方法生成的值的可观察值.一种方法是创建一个从Do调用的事件,并使用Observable.FromEvent创建observable.但不知何故,为了完成任务,我对创建一个事件并不感到满意.有没有更好的方法呢?
查看为ASP.NET MVC2编写的http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc中的示例代码,我注意到他们可以检查自定义属性是否为通过访问filterContext.ActionDescriptor和filterContext.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应用程序中,我使用Ninject作为DI框架.
我的控制器使用我的HttpAccountService从cookie获取信息.为此,我需要HttpAccountService中的HttpContext.Current.由于这是一个依赖项,我通过构造函数注入它:
kernel.Bind<IAccountService>()
.To<HttpAccountService>()
.InRequestScope()
.WithConstructorArgument("context", HttpContext.Current);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这总是绑定到相同的上下文,这使得在第一个请求完成后,这个上下文变得过时了.
我应该如何正确地注入我的HttpContext?
我目前正在学习C#,这本书名为Beginning Visual C#2010,我在讨论部分方法和类的不同方面和特征的章节中.
引用这本书:
在这一点上考虑为什么部分方法不能具有返回类型.如果您能够自己满意地回答这个问题,那么您可以确信您完全理解了这个主题 - 所以这是留给您的练习."
这是我被卡住的地方.我能想到的唯一原因是,当方法的返回值被分配给代码中的某些内容时,如果没有为partial方法实现定义,则会产生错误.
有人可以帮我清楚这个话题吗?
我真的很沮丧这个问题.我已经尝试更改版本号,但测试资源管理器中没有显示任何测试.
在测试输出窗口中,我可以看到此输出
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) c# ×7
.net ×1
.net-core ×1
asp.net-mvc ×1
autofac ×1
autofixture ×1
dnx ×1
enumerators ×1
f# ×1
httpcontext ×1
ienumerable ×1
json ×1
json.net ×1
ninject ×1
nsubstitute ×1
wrapper ×1
xunit ×1
xunit2 ×1
yield ×1