这两种模式看起来都像是控制反转原理的实现.也就是说,一个对象不应该知道如何构造它的依赖关系.
依赖注入(DI)似乎使用构造函数或setter来"注入"它的依赖项.
使用构造函数注入的示例:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
服务定位器似乎使用了一个"容器",它连接了它的依赖关系并给它foo吧.
使用服务定位器的示例:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo()
{
this.bar = Container.Get<IBar>();
}
//...
}
Run Code Online (Sandbox Code Playgroud)
因为我们的依赖项只是对象本身,所以这些依赖项具有依赖项,它们具有更多依赖项,依此类推.因此,控制容器的反转(或DI容器)诞生了.示例:Castle Windsor,Ninject,Structure Map,Spring等)
但是,IOC/DI容器看起来完全相同像一个服务定位器.将它称为DI容器是一个坏名字?IOC/DI容器只是另一种服务定位器吗?当我们有很多依赖关系时,我们使用DI容器这一事实的细微差别是什么?
我有一个实现IEnumerable但没有实现的类IEnumerable<T>.我不能改变这个类,我不能使用另一个类而不是它.正如我从MSDN中所理解的那样,如果类实现,可以使用LINQIEnumerable<T>.我尝试过使用instance.ToQueryable(),但它仍然没有启用LINQ方法.我确信这个类只能包含一种类型的实例,所以类可以实现IEnumerable<T>,但它没有.那么我该怎么做才能使用LINQ表达式查询这个类?
我注意到一些属性是在CSS中继承的,有些则不是.例如,继承text-size属性,但子块不继承填充和边距.那么如何确定哪些属性是继承的,哪些属性不是?
我有一个L2E查询返回一些包含重复对象的数据.我需要删除那些重复的对象.基本上我应该假设如果他们的ID是相同的,那么对象是重复的.我试过了q.Distinct(),但仍然返回了重复的对象.然后我尝试实现自己的IEqualityComparer并将其传递给Distinct()方法.该方法失败,并带有以下文字:
LINQ to Entities无法识别方法'System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable1 [DAL.MyDOClass],System.Collections.Generic.IEqualityComparer`1 [DAL.MyDOClass])'方法,并且此方法无法转换为商店表达式.
这是EqualityComparer的实现:
internal class MyDOClassComparer: EqualityComparer<MyDOClass>
{
public override bool Equals(MyDOClass x, MyDOClass y)
{
return x.Id == y.Id;
}
public override int GetHashCode(MyDOClass obj)
{
return obj == null ? 0 : obj.Id;
}
}
Run Code Online (Sandbox Code Playgroud)
那我该怎么写自己的IEqualityComparer呢?
在我的项目中,有一个自定义样式的文本框.它被定义为:
<Style TargetType="TextBox"/>
Run Code Online (Sandbox Code Playgroud)
因此,它默认应用于所有文本框子控件.
我需要创建另一种基于默认样式的样式.但是如何在BasedOn属性中指定我的新样式应该使用默认样式?
ASP.NET菜单创建一个跳过链接,其大小为0x19,在资源管理器中不可见,但它以chrome格式呈现!所以我的菜单有额外的19像素缩进!我该如何克服这个问题?这是它的HTML:
<a href="#HeaderMenu1_Menu1_SkipLink">
<img alt="Skip Navigation Links" src="/WebResource.axd?d=ChOum_wTGSzbwK97BQPV0ITybaR8NYj0fCEsJDNZ46Dhv_eO5a-qipjyNL4I6aiynUitzcOuIwIjwyFX_snxVbyAZO7glY1Vhbd4zETG4j41&t=634280594527374621" width="0" height="0" style="border-width:0px;">
</a>
Run Code Online (Sandbox Code Playgroud) 让我们想象我有:
<RadioButton GroupName="Group1" IsChecked="{Binding Path=RadioButton1IsChecked}" />
<RadioButton GroupName="Group1" IsChecked="{Binding Path=RadioButton2IsChecked}" />
Run Code Online (Sandbox Code Playgroud)
然后在我的数据源类中,我有:
public bool RadioButton1IsChecked { get; set; }
public bool RadioButton2IsChecked { get; set; }
public enum RadioButtons { RadioButton1, RadioButton2, None }
public RadioButtons SelectedRadioButton
{
get
{
if (this.RadioButtonIsChecked)
return RadioButtons.RadioButton1;
else if (this.RadioButtonIsChecked)
return RadioButtons.RadioButton2;
else
return RadioButtons.None;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式将我的单选按钮直接绑定到SelectedRadioButton属性吗?我真的只需要RadioButton1IsChecked和RadioButton2IsChecked属性来计算选定的单选按钮.
typeof当我们想要获取指定类型的Type实例时,我们可以使用C#关键字.但是,如果我想MethodInfo通过它的参考得到一个方法,我可以使用什么?
例如,我有一个简单的控制台应用程序.它包含Program.Main方法.我希望MethodInfo通过使用类似的东西methodinfoof(Program.Main).我有这个问题,因为方法名称可能会改变,所以我不能只使用Type.GetMethodInfo(string MethodName)它.
我有大约10 000种方法可供我使用MethodInfo,因此在我的方法中添加任何自定义属性或其他任何方法都不是解决方案.
我有一个WPF按钮,里面有一些文字.如果我没有手动设置按钮的宽度,那么按钮宽度几乎是文本的宽度,看起来不是很好.我不想计算每个按钮的宽度.是否有更方便的方法来指定按钮的相对宽度?例如,在CSS中,您可以指定填充或边距.在WPF中有类似的东西吗?
当我双击安装Excel 2010的VSTO插件时,我收到一条消息"无法安装此应用程序,因为已经安装了具有相同标识的应用程序.要安装此应用程序,请修改此应用程序的清单版本或卸载预先存在的应用程序".此插件以前使用控制面板中的"卸载程序"窗口卸载.那么我该如何重新安装插件呢?
我还从HKCU\Software\Microsoft\Fusion\DownloadCacheLocation注册表项中指定的目录中删除了以前的插件.
所有异常: System.Deployment.Application.DeploymentException:无法安装此应用程序,因为已安装具有相同标识的应用程序.要安装此应用程序,请修改此应用程序的清单版本或卸载预先存在的应用程序.
在Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.DownloadAddIn(TimeSpan超时)
在Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()
wpf ×3
.net ×2
c# ×2
asp.net ×1
binding ×1
button ×1
css ×1
distinct ×1
ienumerable ×1
indentation ×1
inheritance ×1
install ×1
linq ×1
margin ×1
menu ×1
methodinfo ×1
ms-office ×1
padding ×1
plugins ×1
radio-button ×1
radio-group ×1
reflection ×1
styling ×1
text ×1
typeof ×1
uninstall ×1
vsto ×1
xaml ×1