小编Edw*_*uay的帖子

这在Prism/Unity中意味着什么:Container.Resolve <ShellPresenter>()

(来自Prism V2 StockTrader示例应用程序中的StockTraderRIBootstrapper.cs文件)

这有什么区别:

ShellPresenter presenter = new ShellPresenter();
Run Code Online (Sandbox Code Playgroud)

还有这个:

ShellPresenter presenter = Container.Resolve<ShellPresenter>();
Run Code Online (Sandbox Code Playgroud)
  • 我理解第二个例子是将容器视为工厂,走到它说"我需要一个ShellPresenter类型的实例化对象".
  • 但是,如果我需要发送参数,相当于"new ShellPresenter(1,true)"等等,该怎么办?
  • 而且由于必须告诉Container有关ShellPresenter的信息,我希望在项目中找到ShellPresenter类在容器中注册的地方,例如我期待的

这样的事情:

Container.RegisterType<IShellPresenter, ShellPresenter>();
Run Code Online (Sandbox Code Playgroud)

但发现它无处可寻.那么容器如何才能了解这些类型呢?它们可以解决它们吗?我在自己的项目中重建了这个并获得"依赖失败的解决方案"错误,那么我在哪里需要注册这个依赖呢?

这里的任何方向/讨论都会有所帮助.

原因不明的答案:

所以,在bootstrapper中,当我注册Shell本身时:

protected override void ConfigureContainer()
{
    Container.RegisterType<IShellView, Shell>();
    base.ConfigureContainer();
}
Run Code Online (Sandbox Code Playgroud)

然后Container可以解析ShellPresenter类型.那么当我注册Shell类型时,ShellPresenter类型是如何注册的?

令人惊讶的答案:

好的,所以事实证明你不必注册你想要解决的类型,但你必须注册传递给你想要解决的类型的构造函数的参数(接口)类型,即因为我注入IShellView接口进入我的ShellPresenter的构造函数,我需要注册IShellView类型而不是IShellPresenter类型:

public ShellPresenter(IShellView view) ...
Run Code Online (Sandbox Code Playgroud)

我通过尝试解决类型测试器测试了这个:

Tester tester = Container.Resolve<Tester>();
Run Code Online (Sandbox Code Playgroud)

只要我将SomeClass注入其构造函数:

public Tester(ISomeClass someClass)
Run Code Online (Sandbox Code Playgroud)

在我用容器注册SomeClass之前,我得到了未解决的依赖错误:

Container.RegisterType<ISomeClass, SomeClass>();
Run Code Online (Sandbox Code Playgroud)

然后它工作.这和教育一样令人惊讶.需要沉入其中.我要去喝杯咖啡并考虑一下.

如果有人能详细说明为什么会这样,那将非常感激.

containers prism inversion-of-control unity-container

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

如何在MVVM模式中使用WPF转换器?

假设我有一个绑定到ViewModel A的View,它有一个可观察的集合Customers.

这个MVVM模式的一个优点是我还可以将View绑定到ViewModel B,后者用不同的数据填充它.

但是如果在我的View转换器转换器中显示我的客户,例如我有一个接受合同的"ContractToCustomerConverter"并返回要显示的相应客户.

这个问题是转换器存在于MVVM模式之外,因此不知道我的ViewModel有另一个客户来源.

  • 有没有办法让View将ViewModel传递给Converter,以便它参与MVVM模式提供的解耦?
  • 有没有办法让我以某种方式在我的ViewModel中包含转换器,以便转换器使用ViewModel可用的当前依赖项?
  • 或者转换器只是美化代码隐藏,因此没有在MVVM模式中使用,所以如果你使用MVVM,那么你只需要创建自己的"转换器"(ViewModel类上的方法),它们返回像Image对象,Visibility对象,FlowDocuments之类的东西.等在视图上使用,而不是使用转换器?

(我在看到MVVM模板工具包下载附带的WPF演示应用程序中使用转换器后遇到了这些问题,解压后请参阅"Messenger Sample".)

wpf mvvm

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

Netbeans for PHP中的"类概要视图"在哪里?

在Eclipse中,我有一个类大纲视图,它向我展示了我的班级成员:

替代文字

我安装了NetBeans 6.9.1,但找不到一个窗口,显示我正在处理的类中的方法列表等.我在哪里可以找到这个?

替代文字

php netbeans

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

是否有任何实际的理由使用"em"而不是"pt"字体大小单位?

我学到的一个CSS规则是你应该使用相对"em"字体大小的单位而不是绝对的"pt".一般的想法是将body标签中的font-size设置为例如"94%",然后将所有其他元素设置为这样的"em"大小.理由是:

  • 然后,您可以通过在一个点修改正文的字体大小来更改站点上所有字体大小的相对大小
  • 用户自己可以修改字体的大小,因为它们是在"em"中定义的

然而,当使用"em"而不是"pt"时,我经常遇到如下问题,其中具有font-size的元素被嵌入到具有font-size的另一个元素中并因此变得很小(在一个词汇单词下面的情况下是.8的.8和另一个是1.2的.8).

<html>
<head>
    <style type="text/css">
        body {
            font-size: 94%;
        }
        p {
            font-size: .8em;
        }
        li {
            font-size: 1.2em;
        }
        .vocabulary {
            font-size: .8em;
        }
    </style>
</head>
<body>
    <p>This is an <span class="vocabulary">egregious</span> test.</p>
    <ul>
        <li>This is in a <span class="vocabulary">superb</span> list.</li>
    </ul>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

当然,在非常简单,直接的HTML网站中,这没有问题,但在现实世界中,您可能甚至没有制作导入的样式表,并且在其他控件中嵌入了控件的动态网站,所有这些都可能输出HTML在线样式,我发现有"em"单位字体大小的网站有时无法维护,控制字体大小的方法是将所有内容转换为硬"px"大小.

另外,我刚检查了四个主浏览器,每个浏览器都有热键,可以增加和减少"pt"样式字体的大小.

所以这是我的问题:

  • 我有什么理由要用"em"代替"pt"吗?
  • 是否有使用"em"大小的技巧,以便我不遇到上面的嵌入式字体大小问题?

css

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

为什么SQL Server CE不支持varchar?

我在SQL Server CE中创建了一个表,并意识到它不支持varchar.

仔细研究一下,我发现"不支持非Unicode文本列(varchar,char,text)和smallmoney;虽然支持nvarchar,nchar,ntext和money",如MSDN所述.

这是真的?这究竟是为什么?似乎一个紧凑的数据库将支持需要较少字节存储的数据类型......我假设它需要更多空间来保存Unicode字符.

这背后的原因是什么?

sql-server-ce

16
推荐指数
2
解决办法
7357
查看次数

C#中"()=>"是什么意思?

在综合申请指南中涉及以下内容.

我知道=>是一个lambda但是()是什么意思?

还有其他一些例子吗?

它叫什么,所以我可以搜索它?

this.regionViewRegistry.RegisterViewWithRegion(RegionNames.SelectionRegion
        , () => this.container.Resolve<EmployeesListPresenter>().View);
Run Code Online (Sandbox Code Playgroud)

c# syntax lambda

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

您如何在大型项目中保持WPF资源的组织?

在即使是最小的WPF例子和原型我一直在做,<Windows.Resources>开始臃肿快.把它重新放入app.xaml我的Windows和UserControls,但它很难组织(Visual Studio"XAML折叠"功能没有任何帮助,因为你只有一个页面充满了"Style ..."这个词).

另外,我正在努力想出一种易于记忆和有组织的方式来命名我的风格.最好的方法我发现它只是为了冗长和描述性,所以我得到这样的东西:BottomMainLeftScrollViewerStyle等.但这有其局限性,很快也会让人感到困惑.我决定使用camelCase作为样式名称,以便在XAML的页面和页面中轻松发现它们.

您有什么策略可以防止WPF资源变得笨拙?

<Window.Resources>

    <local:CutOffConverter x:Key="AgeConverter" Cutoff="30"/>

    <Style TargetType="Grid" x:Key="customerGridMainStyle">
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint=".5,.5">
                    <GradientStop Offset="0.0" Color="#888"/>
                    <GradientStop Offset="1.0" Color="#ccc"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="StackPanel" x:Key="mainStackPanelStyle">
        <Setter Property="HorizontalAlignment" Value="Left"/>
    </Style>
    <Style TargetType="ScrollViewer" x:Key="mainScrollViewerStyle">
        <Setter Property="Height" Value="250"/>
    </Style>
    <Style TargetType="ListBox" x:Key="mainListBoxStyle">
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Margin" Value="10"/>
    </Style>


    <ObjectDataProvider x:Key="customers"
                        ObjectType="{x:Type local:Customer}"
                        MethodName="GetAllCustomers"/>

    <DataTemplate DataType="{x:Type local:Customer}">
        <Grid x:Name="MainGrid" Style="{StaticResource customerGridMainStyle}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"/> …
Run Code Online (Sandbox Code Playgroud)

wpf resources xaml

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

如何在一行C#3.0中将object []转换为List <string>?

好吧,我放弃了,你怎么在一条线上做到这一点?

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    //List<string> fields = values.ToList<string>();
    //List<string> fields = values as List<string>;
    //List<string> fields = (List<string>)values;

    List<string> fields = new List<string>();
    foreach (object value in values)
    {
        fields.Add(value.ToString());
    }

    //process the fields here knowning they are strings
    ...
}
Run Code Online (Sandbox Code Playgroud)

c# generics casting list

16
推荐指数
3
解决办法
6万
查看次数

如何在Visual Studio中"添加现有项..."工作?

我从不在Visual Studio的解决方案资源管理器中使用" 添加现有项目..."功能,因为它令人困惑:

  • 在我看来它应该工作的方式是,如果你在Models目录中有一个Customer.cs文件,你可以选择"添加现有项目",它会显示该目录中存在哪些项目允许你选择一个.相反,它会打开一个文件对话框到硬盘上的一些看似随意的目录,我不知道这是否是要进行复制该文件,或使用它以外的解决方案,等等.
  • 相反,如果我想"添加一个existimg项目",我进入Windows资源管理器,单击文件,CTRL-C,单击解决方案资源管理器中的文件夹,ctrl-v,它很明显

别人做的不同吗?我错过了一些关于解决方案资源管理器中"添加现有项目"应该如何工作的内容?

visual-studio

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

有什么理由不检查silverlight应用程序中的"应用程序库缓存"和"GPU加速"吗?

设置silverlight应用程序的属性时,我会看到未选中的框:

  • 使用应用程序库缓存减少XAP大小
  • 使用GPU加速

更小的下载大小更快的速度声音对我来说很好,这让我想知道为什么这些没有默认打开.

那么这些选择的缺点是什么?

silverlight

16
推荐指数
2
解决办法
1428
查看次数