小编MeT*_*tus的帖子

C#Generic Method,不能隐式转换

我有以下代码:

public static T GetCar<T>() where T : ICar
{
    T objCar = default(T);

    if (typeof(T) == typeof(SmallCar)) {
        objCar = new SmallCar("");
    } else if (typeof(T) == typeof(MediumCar)) {
        objCar = new MediumCar("");
    } else if (typeof(T) == typeof(BigCar)) {
        objCar = new BigCar("");
    }

    return objCar;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误: Cannot implicitly convert type 'Test.Cars' to 'T'

我在这里失踪了什么?所有车型均采用ICar接口.

谢谢

c# generics methods

8
推荐指数
2
解决办法
7978
查看次数

web api从处理程序内部获取路径模板

在把这些问题放在这里之前我搜索了很多但是我搜索的越多,我得到的就越混乱.

所以我创建了一个处理程序,我试图得到这样的路线:

public class ExecutionDelegatingHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (securityAuthority.VerifyPermissionToExecute(request.GetRouteData().Route.RouteTemplate, request.Headers))
        {
            return base.SendAsync(request, cancellationToken);
        }
        else
        {
            httpResponseMessage.StatusCode = HttpStatusCode.Unauthorized;
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

GetRouteData返回null,因此我无法访问RouteTemplate属性,但我可以在堆栈深处的列表中看到该路径.我找到了许多可以用来获取路径的不同方法,但这些方法也评估为null.我对如何完成如此简单的事情感到有点迷茫.我使用自主机进行开发,但将使用IIS进行部署.

更新1

我忘了把我尝试过的其他东西放在这里:

//NULL
request.GetRouteData(); 
//EMPTY
request.GetRequestContext().Configuration.Routes.GetRouteData(request).Route.RouteTemplate;
//EMPTY
request.GetConfiguration().Routes.GetRouteData(request).Route.RouteTemplate;
Run Code Online (Sandbox Code Playgroud)

路线工作得很好,但奇怪的是,如果我试图让控制器为这个请求提供服务,我会得到一个404 ......如果我只是跳过那个我就会到达控制器就好了.

HttpControllerDescriptor httpControllerDescriptor = request.GetRequestContext().Configuration.Services.GetHttpControllerSelector().SelectController(request);
IHttpController httpController = httpControllerDescriptor.CreateController(request);
Run Code Online (Sandbox Code Playgroud)

我正在使用autofac来发现我定义的所有路径,如:

[Route("queries/organization/clients")]
[HttpGet]
public ClientInitialScreenModel GetClients()
{
    return OrganizationModelsBuilder.GetClientInitialScreen();
}
Run Code Online (Sandbox Code Playgroud)

更新2

如果我在上面的行之后调用GetRouteData,我就可以获得路径模板:

base.SendAsync(request, cancellationToken);

var routeData = request.GetRouteData();
Run Code Online (Sandbox Code Playgroud)

所以也许我误解了整个图片,我无法在处理程序之前得到路由模板,该处理程序解析了为请求执行哪个控制器的工作......就是这样的情况?

作为参考,这是我正在处理的处理程序:

public class ExecutionDelegatingHandler : DelegatingHandler
{
    protected override …
Run Code Online (Sandbox Code Playgroud)

c#-4.0 asp.net-web-api asp.net-web-api-routing asp.net-web-api2

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

MemoryStream更换?

几个星期前,我读到了一些关于.Net 4/4.5中一个比MemoryStream更好的新类的内容,但我似乎无法再找到它了.

我查看了IO命名空间,找不到任何东西.有人记得读过那样的东西吗?

谢谢

.net c# memorystream

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

从字符串中获取枚举值

我做了一个在线评估,我试图了解结果,这里我已经做过一个问题:

更改为方法声明

所以问题是:

在此输入图像描述

在此输入图像描述

报告说:

在此输入图像描述

我不明白为什么我的答案被标记为部分正确,我错过了什么?此外,问题是这是一个字符串操作问题,虽然对我来说它与该主题无关.

马尔科

UPDATE

答案C不对,我误以为我使用的是var关键字,而不是实际的枚举.

c#

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

获取使用 Register-ObjectEvent 注册的 Powershell 作业的输出

我有这个正在执行但不返回输出的脚本。

function code-Build-RepoWeb
{
     $job = Start-Job { code-Build-Component RepoWeb; Start-Sleep -seconds 5 }

     Register-ObjectEvent $job -EventName StateChanged `
    -SourceIdentifier JobStateChanged `
    -Action {$jobInfo = Receive-Job -Keep $Sender; Write-Host $jobInfo }
 }
Run Code Online (Sandbox Code Playgroud)

我不是 Powershell 专家,在提出问题之前阅读了一些文档。

谢谢

powershell

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

AutoFac+WebAPI 不处理对象

我有以下代码来构建依赖项:

private static void InitializeContainer(HttpConfiguration config)
{
    var builder = new ContainerBuilder();
    var controllers = AssemblyUtils.GetAssemblies(true);

    controllers.Add(Assembly.GetExecutingAssembly());

    builder.RegisterApiControllers(controllers.ToArray()).PropertiesAutowired();

    builder
        .RegisterAssemblyTypes(
            new List<Assembly>(AssemblyUtils.GetAssemblies(false))
            {
                Assembly.GetExecutingAssembly()
            }.ToArray())
        .Where(t =>
            t.GetCustomAttributes(typeof(IocContainerMarkerAttribute), false).Any() ||
            t.IsSubclassOf(typeof(HandlerAspectAttribute)) ||
            typeof(ICoreContract).IsAssignableFrom(t))
        .AsImplementedInterfaces().InstancePerDependency()
        .PropertiesAutowired().OwnedByLifetimeScope();

    var container = builder.Build();

    GlobalConfiguration.Configuration.DependencyResolver =
       new AutofacWebApiDependencyResolver(container);

    config.DependencyResolver =
        GlobalConfiguration.Configuration.DependencyResolver;
}
Run Code Online (Sandbox Code Playgroud)

处理程序:

public class ArchieveDocumentCommandHandler 
    : IHandler<ArchieveDocumentCommand>, IDisposable
{
    public IServiceMessageDispatcher Dispatcher { get; set; }
    public IDocumentRepository DocumentRepository { get; set; }
    public IFileSystemProvider FileSystemProvider { get; set; }
    public ICoreSettingRepository CoreSettingRepository { …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection autofac asp.net-web-api2

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

非标志枚举上的按位运算

鉴于以下枚举:

enum MyEnum
{
    ValueOne = 1,
    ValueEmpty,
    ValueTwo = 2,
    ValueThree = 2,
    ValueFour = ValueOne | ValueEmpty,
    ValueFive = ValueTwo | ValueThree
}
Run Code Online (Sandbox Code Playgroud)

ValueFour和ValueFive元素中涉及的操作是什么,因为这些是我得到的值?

//Is assigned 3
var valueOne = (int) MyEnum.ValueFour;

//Is assigned 2
var valueTwo = (int)MyEnum.ValueFive;
Run Code Online (Sandbox Code Playgroud)

谢谢

c#

0
推荐指数
1
解决办法
90
查看次数