Questions tagged «inversion-of-control»

控制反转(IoC)是一种抽象原理,描述了一些软件体系结构设计的一个方面,其中与过程编程相比,系统的控制流是反向的。


4
Ioc / DI-为什么我必须引用应用程序入口点中的所有层/程序集?
(与此问题相关的EF4:为什么在启用延迟加载后必须启用代理创建?)。 我是DI的新手,所以请多多包涵。我知道容器负责实例化我所有的注册类型,但要这样做,它需要引用我的解决方案中的所有DLL及其引用。 如果我不使用DI容器,则不必引用我的MVC3应用程序中的EntityFramework库,而只需引用我的DAL / Repo层的业务层即可。 我知道最终所有DLL都包含在bin文件夹中,但是我的问题是必须能够通过VS中的“添加引用”显式引用它,以便能够发布包含所有必要文件的WAP。

5
如何在ASP.NET Core中解析ConfigureConfigs内部的实例
是否可以IOptions<AppSettings>从“ ConfigureServices启动”中的方法解析实例?通常,您可以IServiceProvider用来初始化实例,但是在注册服务时此阶段没有实例。 public void ConfigureServices(IServiceCollection services) { services.Configure<AppSettings>( configuration.GetConfigurationSection(nameof(AppSettings))); // How can I resolve IOptions<AppSettings> here? }


2
为什么不使用IoC容器来解析实体/业务对象的依赖关系?
我了解DI背后的概念,但我只是在学习不同的IoC容器可以做什么。似乎大多数人主张使用IoC容器来连接无状态服务,但是将它们用于诸如实体之类的有状态对象又如何呢? 无论是对还是错,我通常都会用行为来填充我的实体,即使该行为需要外部类。例: public class Order : IOrder { private string _ShipAddress; private IShipQuoter _ShipQuoter; public Order(IOrderData OrderData, IShipQuoter ShipQuoter) { // OrderData comes from a repository and has the data needed // to construct order _ShipAddress = OrderData.ShipAddress; // etc. _ShipQuoter = ShipQuoter; } private decimal GetShippingRate() { return _ShipQuoter.GetRate(this); …

7
程序员说“针对接口而不是对象的代码”是什么意思?
我已经开始了漫长而艰巨的学习和追求 应用TDD到我的工作流程。我觉得TDD非常符合IoC原则。 在SO中浏览了一些TDD标签的问题之后,我读到对接口(而不是对象)进行编程是一个好主意。 您能否提供简单的代码示例,以及如何在实际用例中应用它?简单的示例对我(以及其他想学习的人)来说是理解概念的关键。

1
F#中的应用程序架构/组成
最近,我一直在C#中将SOLID进行到相当极端的水平,并且在某个时刻意识到,除了如今编写函数之外,我基本上没有做其他事情。在我最近再次开始研究F#之后,我发现对于我现在正在做的大部分事情来说,这可能是更合适的语言选择,因此我想尝试将一个实际的C#项目移植到F#中作为概念证明。我想我可以(以一种非常惯用的方式)发布实际的代码,但是我无法想象这样一个架构看起来会像我在C#中一样灵活地工作。 我的意思是说,我有很多小的类和接口是使用IoC容器编写的,而且我也经常使用诸如Decorator和Composite的模式。这导致(我认为)非常灵活和可发展的整体体系结构,使我可以轻松地在应用程序的任何位置替换或扩展功能。根据所需的更改量,我可能只需要编写一个接口的新实现,并在IoC注册中替换它即可完成。即使变化更大,我也可以替换对象图的一部分,而应用程序的其余部分将像以前一样保持原样。 现在使用F#,我没有类和接口(我知道我可以,但是我认为那是我想进行实际函数编程的要点),我没有构造函数注入,也没有IoC容器。我知道我可以使用高阶函数来完成类似Decorator模式的操作,但这似乎并没有像构造函数注入类那样给我带来灵活性和可维护性。 考虑以下C#类型: public class Dings { public string Lol { get; set; } public string Rofl { get; set; } } public interface IGetStuff { IEnumerable<Dings> For(Guid id); } public class AsdFilteringGetStuff : IGetStuff { private readonly IGetStuff _innerGetStuff; public AsdFilteringGetStuff(IGetStuff innerGetStuff) { this._innerGetStuff = innerGetStuff; } public …



4
MEF与任何IoC
从Microsoft的Managed Extensibility Framework(MEF)和各种IoC容器(例如Unity)来看,我看不到何时使用一种解决方案。更具体地说,似乎MEF可以处理大多数IoC类型模式,而像Unity这样的IoC容器则不是必需的。 理想情况下,我希望看到一个很好的用例,其中将使用IoC容器代替MEF或作为MEF的补充。

4
使用Unity如何将命名依赖项注入到构造函数中?
我IRespository在以下代码中两次注册了(带有名称): // Setup the Client Repository IOC.Container.RegisterType<ClientEntities>(new InjectionConstructor()); IOC.Container.RegisterType<IRepository, GenericRepository> ("Client", new InjectionConstructor(typeof(ClientEntities))); // Setup the Customer Repository IOC.Container.RegisterType<CustomerEntities>(new InjectionConstructor()); IOC.Container.RegisterType<IRepository, GenericRepository> ("Customer", new InjectionConstructor(typeof(CustomerEntities))); IOC.Container.RegisterType<IClientModel, ClientModel>(); IOC.Container.RegisterType<ICustomerModel, CustomerModel>(); 但是,当我想解决此问题(使用IRepository)时,我必须像这样手动解决: public ClientModel(IUnityContainer container) { this.dataAccess = container.Resolve<IRepository>(Client); ..... } 我想做的是在构造函数中解析它(就像IUnityContainer)。我需要某种方式说出要解决的命名类型。 这样的事情:(注意:不是真实的代码) public ClientModel([NamedDependancy("Client")] IRepository dataAccess) { this.dataAccess = dataAccess; ..... …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.