小编Chr*_*sCa的帖子

C#泛型问题 - 使用构造函数中的参数新建泛型类型

我正在尝试创建一个泛型类,其中new是泛型类的实例.如下:

public class HomepageCarousel<T> : List<T>
    where T: IHomepageCarouselItem, new()
{
    private List<T> GetInitialCarouselData()
    {
        List<T> carouselItems = new List<T>();

        if (jewellerHomepages != null)
        {
            foreach (PageData pageData in jewellerHomepages)
            {
               T item = new T(pageData); // this line wont compile
               carouselItems.Add(item);
            }
        }
        return carouselItems;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

在创建变量类型的实例时无法提供参数

我发现了以下与我需要的相关的问题:将 参数传递给模板化类型的C#generic new()

但是,我不能使用Jared建议的答案,因为我在Generic类中调用方法,而不是在它之外,所以我不能指定具体的类.

有没有解决的办法?

我已根据另一个问题尝试了以下内容,但它不起作用,因为我不知道要指定的具体类型.从泛型类中调用它,而不是在外面调用:

public class HomepageCarousel<T> : List<T>
    where T: IHomepageCarouselItem, new()
{

    private List<T> LoadCarouselItems()
    {
        if (IsCarouselConfigued)
        {
            return GetConfiguredCarouselData();
        }

        // ****** I don't …
Run Code Online (Sandbox Code Playgroud)

c# generics

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

从jQuery访问Web服务 - 跨域

我试图从jQuery客户端访问一个wcf服务

特别是这个例子 http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

当客户端网页与服务位于同一域时,一切正常

一旦我将客户端网页移动到另一个域,它就会中断.它无法访问服务,请求失败

对于所有示例,ASMX,REST和WCF都会发生这种情况

任何想法如何让这个工作交叉daomain?

ajax wcf jquery json cross-domain

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

CSS - 固定宽度span/div

我正在尝试为弹出对话框布局内容,但没有太多运气

我尝试过使用跨度和内联div,但它们似乎都不尊重宽度或最小宽度的CSS

有任何想法吗?

这是Html

<div id="MessageBox" class="ui-dialog-content ui-widget-content" style="width: auto; min-height: 40.8333px; height: auto;" scrolltop="0" scrollleft="0">

<div class="popupKey">Bank Reference</div>
<div class="popupValue"></div>
<br>
<div class="popupKey">Amount</div>
<div class="popupValue">650.00</div>
<br>
<div class="popupKey">Currency</div>
<div class="popupValue">GBP</div>
<br>
<div class="popupKey">PaymentDate</div>
<div class="popupValue">02/06/2011</div>
<br>
<div class="popupKey">Remitter</div>
<div class="popupValue"></div>
<br>
<div class="popupKey">Senders Reference</div>
<div class="popupValue"></div>
<br>
</div>
Run Code Online (Sandbox Code Playgroud)

和CSS

.popupKey
{
    display : inline;
    min-width: 150px;
}

.popupValue
{
    display : inline;
    min-width: 150px;
}
Run Code Online (Sandbox Code Playgroud)

我希望popupValue列中的所有项都对齐

这里有一个JSFiddle:

http://jsfiddle.net/NtK4Y/

html css

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

IoC - 构造函数将运行时值作为一个参数,将服务作为另一个参数

我有一个WPF应用程序,当它启动时,查看文件系统的一些配置文件

对于它找到的每个配置文件,它会在不同的窗口中显示一些信息

每个窗口都有一个关联的ViewModel对象,该对象绑定到windows datacontext

因此,为每个配置文件创建一个新的ViewModel.表示配置文件中数据的对象将传递给viewmodels构造函数

但是,View模型还有其他依赖项传递给构造函数

代码看起来像这样(在从app.xaml启动的引导程序中)

foreach (WindowConfig config in ConfigManager.GetConfigs())
{
    IMyService svc = new MyService();

    //change to resolve from IoC container
    MyViewModel vm = new MyViewModel(config, svc);

    Window1 view = new Window1();

    view.DataContext = vm;

    window.show();
}
Run Code Online (Sandbox Code Playgroud)

我想使用Castle IoC contaoiner解决这些依赖关系.我知道如何为IMyService做到这一点,但我怎么能为从配置文件创建的特定类做到这一点?

谢谢

c# wpf dependency-injection castle ioc-container

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

ASP.NET Web API中处理程序和筛选器的依赖注入

我正在尝试连接我的Web Api项目,以便将Castle Windsor用于IoC

我按照这篇优秀的文章为我的控制器做了这个.

我现在正试图将依赖注入到DelegatingHandler和ActionFilterAttribute中

我试图在常规ASP.Net MVC中复制用于过滤器的技术,但它们似乎不适用于Web Api

谁有人设法让这个工作?

我不确定Web Api中的相关扩展点是什么

我已经看到了这个建议

config.MessageHandlers.Add(_myContainer.Resolve<IApiUsageLogger>());
Run Code Online (Sandbox Code Playgroud)

但不确定是否有更好的方法.我更愿意利用创建这些处理程序/过滤器的机制

因为这有很多处理程序的服务位置的味道.是否有一个点可以创建所有处理程序?

有任何想法吗?

c# dependency-injection castle-windsor inversion-of-control asp.net-web-api

11
推荐指数
2
解决办法
3594
查看次数

ASP Web Api - IoC - 解析HttpRequestMessage

我正在尝试使用ASP.NET WebAPI设置Castle Windsor.

我也使用Hyprlinkr包(https://github.com/ploeh/Hyprlinkr),因此需要将HttpRequestMessage的实例注入到我的控制器的一个依赖项中.

我正在关注Mark Seemann的这篇文章 - http://blog.ploeh.dk/2012/04/19/WiringHttpControllerContextWithCastleWindsor.aspx,但我发现虽然API运行,但当我调用它时,请求只是挂起.没有错误消息.就好像它处于无限循环中一样.它停留在我的Custom ControllerActivator调用Resolve上

我想我的一些城堡注册错了.如果我删除上面文章中提到的那些,那么我可以成功调用API(尽管没有我需要解决的依赖项)

有任何想法吗?

代码在下面

//Global.asax
public class WebApiApplication : HttpApplication
{
    private readonly IWindsorContainer container;

    public WebApiApplication()
    {
        container = 
            new WindsorContainer(
                new DefaultKernel(
                    new InlineDependenciesPropagatingDependencyResolver(), 
                    new DefaultProxyFactory()), 
                new DefaultComponentInstaller());

        container.Install(new DependencyInstaller());
    }

    protected void Application_Start()
    {        
        GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new WindsorCompositionRoot(this.container));
    }

// installer
public class DependencyInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.AddFacility<TypedFactoryFacility>();

        container.Register(
            Component.For<ValuesController>()
                .Named("ValuesController")
                .LifeStyle.PerWebRequest,

            Component.For<IResourceLinker>()
                .ImplementedBy<RouteLinker>()
                .LifeStyle.PerWebRequest,

            Component.For<IResourceModelBuilder>()
                .ImplementedBy<ResourceModelBuilder>()
                .LifeStyle.PerWebRequest,

                Component.For<HttpRequestMessage>()
                .Named("HttpRequestMessage") …
Run Code Online (Sandbox Code Playgroud)

c# castle-windsor inversion-of-control asp.net-web-api hyprlinkr

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

IoC容器是否取代了工厂的使用

我刚刚开始使用IoC容器,如果这是一个愚蠢的问题,请道歉.

我在应用程序中有如下代码

internal static class StaticDataHandlerFactory
    {
        public static IStaticDataHandler CreateHandler(StaticDataUpdate staticDataUpdate)
        {
            if (staticDataUpdate.Item is StaticDataUpdateOffice)
            {
                return new OfficeUpdateHandler();
            }

            if (staticDataUpdate.Item is StaticDataUpdateEmployee)
            {
                return new EmployeeUpdateHandler();   
            }

            if (staticDataUpdate.Item == null)
            {
                throw new NotImplementedException(
                    string.Format("No static data provided"));
            }
            else
            {
                throw new NotImplementedException(
                    string.Format("Unimplemented static data type of {0}", staticDataUpdate.Item.GetType().FullName));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

它基本上是一个简单的工厂,它返回处理输入数据的正确策略.

IoC容器是否允许我删除这样的代码?也就是说:它是否允许我根据输入参数的类型动态选择要加载的具体实现?

还是我离开这里?

c# factory inversion-of-control

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

使用参数创建git别名

我写了下面的git别名来将我的提交推送到origin并用传递给别名的参数标记它,然后推送标签

pomt = !git push origin master && git tag '$1' && git push --tag
Run Code Online (Sandbox Code Playgroud)

用法:

git pomt myTagGoesHere
Run Code Online (Sandbox Code Playgroud)

但是,这会因错误而失败

致命的'myTagGoesHere'似乎不是一个git存储库

我已经发现还有其他选项可以同时实现这个 推送git提交和标签

但我很好奇我创建的别名有什么问题,并且仍然想知道如何这样做只是为了学习如何使用参数创建别名

这是在Windows上,顺便说一句,如果这对shell脚本有任何影响

git

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

Dotnet Core Windows 服务中的多个托管服务

我有一个基于此示例的 netcore 2.0 Windows 服务: https://www.stevejgordon.co.uk/running-net-core-generic-host-applications-as-a-windows-service

在我的例子中,主要托管服务订阅了消息队列并按顺序处理消息(每次出现新消息时,队列 api 都会引发一个事件)。如果任何消息无法处理,它们将被移至不同的队列以重试(x 次,采用指数退避)。因此这需要在单独的线程上完成,以免导致主队列的处理延迟

配置2个HostedServices可以吗:

var builder = new HostBuilder()
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<MyMsgProcessingService>();
                services.AddHostedService<MyRetryService>();
            });
Run Code Online (Sandbox Code Playgroud)

这确实启动了,并且确实命中了每个服务的StartAsync方法(在接口上)IHostedService

或者你只允许拥有(拥有是个好主意)一种IHostedService实现?

如果两个都可以,慢速服务上的工作会阻碍主服务上的工作吗?

如果只有一个,最好只启动另一个线程来完成重试队列的工作吗?我如何确保新线程在服务运行的整个过程中都存在?循环while似乎不合适,因为我只是在等待引发事件

例如

public Task StartAsync(CancellationToken cancellationToken)
{
    Task t = Task.Run(() => ProcessRetrys(), cancellationToken);
Run Code Online (Sandbox Code Playgroud)

c# multithreading windows-services task .net-core

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

MVC 3 - 脚手架下拉列表

我正在玩Asp.net mvc中的Scaffolding

我的国家视图模型中有一个属性

public IEnumerable<SelectListItem> Countries { get; set; }
Run Code Online (Sandbox Code Playgroud)

然而,当我创建一个视图并指定viewmodel时,它并没有像我预期的那样支持下拉列表.实际上它完全被忽略了.

我之前编译了项目

我也试过添加这样的属性

public int CountryId { get; set; }
Run Code Online (Sandbox Code Playgroud)

正如本文所说,有一项公约在起作用

http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/

我正在使用右键单击控制器操作方法时的" 添加"视图选项

有什么想法有什么不对?

asp.net-mvc scaffolding asp.net-mvc-3

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