小编Alw*_*wyn的帖子

反射发出堆栈和方法调用

有人可以向我解释在通过reflection.emit进行函数调用之前需要加载到堆栈中的内容吗?

我有一个非常简单的方法

public static void Execute(string 1, string 2)
Run Code Online (Sandbox Code Playgroud)

我想动态生成下面的类中的方法(忘记其余的,我把它们整理出来)

public class Test{
    public string s1;

    public void Run(string s2)
    {
        MyOtherClass.Execute(s2,s1)
    }
}
Run Code Online (Sandbox Code Playgroud)

我有上述测试的副本供参考,我注意到在"调用"之前发出了以下操作码.

  1. ldarg_1
  2. ldarg_0
  3. ldfld

问题是ldarg_0在那里做什么?我只需要2个参数用于调用,为什么CLR需要将ldarg_0推送到堆栈?

.net c# reflection reflection.emit

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

在自托管WebApi中获取HttpRequest上下文

如何从自托管的MVC WebAPI访问查询字符串?

使用NRE调用以下失败,因为Current为空(aka.null)

System.Web.HttpContext.Current.Request["myQuery"]
Run Code Online (Sandbox Code Playgroud)

我需要访问控制器外部的当前上下文,因为我想通过控制我的对象实例化.DI.例如.

        container
            .RegisterType<MyObject>(
                new InjectionFactory(
                    uc =>
                        new MyObject(
                            System.Web.HttpContext.Current.Request["myParam"]) //This failed.
                    ));
Run Code Online (Sandbox Code Playgroud)

container.Resolve<MyObject>()由于上述NRE,从ControllerApi代码内部调用失败.

c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

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

从 C# 调用带有自定义类型参数的存储过程?

我有一个自定义类型的程序,如下所示:

CREATE PROCEDURE MyProc
    @Arg1 CustomArgType readonly
AS
BEGIN
.
.
.
END
Run Code Online (Sandbox Code Playgroud)

自定义类型是:

CREATE TYPE dbo.CustomArgType as TABLE
(
    SomeInt int not null
)
Run Code Online (Sandbox Code Playgroud)

如何在c#中调用上面的存储过程?

可以使用什么样的适配器?像 EF 这样的 ORM 可以使用这样的存储过程吗?

c# sql sql-server orm stored-procedures

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

Mvc 3如何列出所有可用的路线?

如何:

@Html.ActionLink("MyText","Index","Home")
Run Code Online (Sandbox Code Playgroud)

翻译为:

<a href="/Home">MyText</a>
Run Code Online (Sandbox Code Playgroud)

而在它打印之前

<a href="/Home/Index">MyText</a>
Run Code Online (Sandbox Code Playgroud)

之后,我通过以下方式为所有控制器添加了默认操作:

        routes.MapRoute(
            "DefaultActionToIndex",
            "{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)

在我看来,辅助方法不仅可以打印传入的内容,还可以解析路径字典,并确定"索引"不是必需的,因为它被设置为默认值.

问题是如何?

c# asp.net-mvc routes razor asp.net-mvc-3

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

C#.net 4.5异步委托

这不会抛出编译错误,但为什么呢?

public async void DoSomething(object arg){ ... }

Action<object> myAnonActionDelegate = DoSomething;
Run Code Online (Sandbox Code Playgroud)

不应该" DoSomething"有一个类型的签名Func<object,Task>而不是Action?事实上," DoSomething"不能转让给Func<object,Task>代表.

问题是为什么?我对async关键字的了解是什么?

c# asynchronous task c#-5.0 asp.net-4.5

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

Unity拦截基于方法注释的更改调用处理程序

我在类中有一个方法,我想拦截:

[CustomTag1(Order = 0)]
[CustomTag2(Order = 1)]
public virtual DoSomething()
Run Code Online (Sandbox Code Playgroud)

ICallHandler.Order在使用时,如何将订单值注入属性CustomAttributeMatchingRule

我不希望将订单硬编码到处理程序本身或注册时.我希望它是方法注释的Order属性的变量.

c# aop unity-container interceptor

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

RPC与ServiceBus样式SOA

这些架构的优点和缺点是什么?

  1. 通过RPC我的意思是远程过程调用服务,如WCF,WebServices等.

  2. 然后在另一方面,有更多面向消息的框架,如MSMQ,NServiceBus,ServiceStack等.

  3. 然后是混合方法,例如WebAPI,它是某种远程活动记录模式(开箱即用它只支持非常有限数量的动词,如"Get","Put","Post"等).

无视,它是如何实际实现的(也就是说.我并不真正关心耐久性,事务等等,因为无论抽象如何都可以实现),这些抽象的优点和缺点是什么?

同样,请不要提供低级别的实施细节,我只想在声音架构,最佳模式和实践方面,甚至是最适合采用每种方式和原因的情况方面做出改变.

architecture wcf rpc nservicebus servicebus

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

OAuthWebSecurity创建帐户 - 它是如何工作的?

我很困惑并关注以下行,因为看起来OAuthWebSecurity的API有自己的身份验证存储.

        // If the current user is logged in add the new account
        OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)

如果我正确阅读上述内容,似乎表明API在本地保存了关系.

请告诉我情况并非如此,并解释它到底是做什么的?我需要我的Web应用程序尽可能无状态,我不能让API存储像这样的本地值.

c# asp.net asp.net-mvc dotnetopenauth asp.net-mvc-4

3
推荐指数
1
解决办法
2680
查看次数

私有成员是否包含在TypeInfo声明的属性中?

TypeInfo默认情况下,新类在"DeclaredXXX"属性中是否包含私有成员?

.net c# reflection system.reflection

3
推荐指数
1
解决办法
716
查看次数

Unity ICallHandler与IInterceptionBehavior

看起来Unity似乎提供了两种不同的路线来实现AoP功能.

问题是为什么?有什么区别?每种方法的优缺点是什么?

例如,使用ICallHandler:

unity.Configure<Interception>()
.AddMatchingRule(
                    new TypeMatchingRule(typeof (ComplexEntity))
                ).AddMatchingRule(
                    new TypeMatchingRule(typeof (ComplexEntity.InnerEntity))
                ).AddMatchingRule(
                    new MemberNameMatchingRule("*")
                ).AddCallHandler(
                    new CallHandler()
                );
Run Code Online (Sandbox Code Playgroud)

但是使用IInterceptionBehavior代替ICallHandler也可以实现类似的功能

unity.RegisterType<ComplexEntity,ComplexEntity>
     (new VirtualMethodInterceptor(), new InterceptionBehavior)
Run Code Online (Sandbox Code Playgroud)

还有一个混合某处可以让你设置拦截,但使用一个调用处理程序,例如.

unity.Configure<Interception>()
                .SetInterceptorFor<ComplexEntity>(new VirtualMethodInterceptor())
                .AddPolicy("TestPolicy")
                .AddMatchingRule(
                    new TypeMatchingRule(typeof (ComplexEntity))
                ).AddMatchingRule(
                    new TypeMatchingRule(typeof (ComplexEntity.InnerEntity))
                ).AddMatchingRule(
                    new MemberNameMatchingRule("*")
                ).AddCallHandler(
                    new CallHandler()
                );
Run Code Online (Sandbox Code Playgroud)

那么哪一个使用?为什么在单一框架中存在看似冗余的解决方案?

c# aop dependency-injection unity-container unity-interception

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