- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我最近开始使用 IoC容器,但我没有接受过使用它的最佳实践方面的教育。更具体地说,我正在使用 Unity在 C# .NET 项目中,我开始使用它,因为它带有 Prism .
我使用容器来解析“顶级”对象,它们根据容器获得正确的注入(inject)对象。但是,当我有一个带有 child 和 child 的 child 的对象时,我无法清楚地看到最佳实践,并且我需要 IoC 容器中的一些数据一直向下,而不是介于两者之间。您通常如何组织 IoC 容器的使用?
最初我认为您会在需要的地方传递容器,而不是从顶层的容器中提取所需的数据并继续传递这些数据。但话又说回来,当我到达除了注入(inject)接口(interface)之外还采用其他特定数据的对象时,我又遇到了问题,我不希望在解析对象后通过属性或初始化方法注入(inject)这些数据。
我希望这已经足够清楚了,但让我们看一个虚构的(有点愚蠢..)的例子。
class Employee
{
private ICommands _commands;
priate List<Customer> _customers = new List<Customer>();
public Employee(ICommands commands)
{
_commands = commands;
}
public void AddCustomer(string customerName)
{
var customer = new Customer(customerName, _commands);
_customers.Add(customer);
}
}
class Customer
{
private string _name;
private ICommands _commands;
priate List<Case> _cases = new List<Case>();
public Customer(string, name, ICommands commands)
{
_name = name;
_commands = commands;
}
public void AddCase()
{
var case = new Case(_commands);
_cases.Add(case);
}
}
class Case {
private ICommands _commands;
public Customer(ICommands commands)
{
_commands = commands;
}
public void TriggerCommands()
{
_command.TriggerSomething();
}
}
所以,这个例子其实没什么意义,但本质和我要做的是一样的。我有一些应用程序命令通过我的 ViewModel 类向下传递,因为其中一些需要能够触发命令来显示某些内容。我还有公共(public)存储等,有些类可能需要这些,但目前是通过并存储在中间类中的。只有命令,如果你存储命令或容器,这没什么大不了的,但是在典型的 IoC 用法中,一个人会传递 IoC 容器,并使用它来解析对象吗?客户姓名等特定数据又如何呢?你不能只将它传递给 Resolve(),所以你需要在之后注入(inject)它?
抱歉 - 这是我能做到的最短的。不需要相同长度的答案 ;-) .. 只是;使用 IoC 容器执行此类操作的最佳做法是什么?
最佳答案
我不太确定我是否理解您的问题。但我认为你根本不应该传递容器。为容器创建一个包装器类要容易得多。例如:
public class IoCContainer
{
private static ContainerType = null;
public static ContainerType Instance
{
get
{
if (_container == null)
{
string configFileName = ConfigurationManager.AppSettings[ConfigFileAppSettingName];
_container = new WindsorContainer(new XmlInterpreter(configFileName));
}
return _container;
}
}
}
现在您可以在代码中的任何地方调用它。
IoCContainer.Instance.Resolve<IAwesomeService>();
这对你有帮助吗?
关于c# - 典型的 IoC 容器用法——向下传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612682/
有什么方法可以使用常用工具(ffmpeg?mplayer/mencoder?mkvmerge?等)来查找关键帧在给定视频文件中出现的频率? {从而找到最小搜索大小?}这似乎是一个显而易见的统计数据,“
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 2 年前。 Improve
我正在阅读Intel的SSD产品specification。那里有一张桌子说 Latency (typical) read/write < 10 us 但是没有更多细节可以解释这个数字。有人知道“典型
出于好奇:典型的 Linux 发行版中最古老的代码/包是什么?电子书?海湾合作委员会? 最佳答案 Sun RPC 很老了,它在 C 库中: http://blogs.oracle.com/webmin
一个常见的假设是 1/x * x == 1。在符合 IEEE 754 标准的常见硬件上打破这个的最小正整数是多少? 当乘法逆的假设失败时,写得不好的有理算术就会停止工作。由于包括 C 和 C++ 在内
流行手机型号支持的典型触摸点数量是多少?我在基础研究中看到低至 2 和高至 5,但我希望能够将其映射到实际手机和更好的限制! 最佳答案 两部手机的触控点数据: Galaxy S 5 LG
我讨厌讨厌IE!既然我已经咆哮了,我确实需要一些帮助。我这里有这个网站。 http://pearsonlyle.uwpistol.net/galleries/susie-theodorou/edito
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
作为来自企业 IT 的 Node.js 初学者,我无法理解 Node.js 用法的某一方面。我将我的问题分为两部分。 问题 1) 严格从可扩展性的角度来看,I/O 密集型 Web 应用程序如何使用 N
我希望我的问题是合法的......我问这个问题是因为在阅读了许多博客,玩了许多示例应用程序和官方 API 1 周后,我仍然很困惑,从哪里开始编码...... 总的来说,就浏览器之间的系统架构而言 W
这是我的汽车类(class): public class Car { private int FGNr; private String name; private String type; priva
我认为我的问题标题清楚地表达了我需要的信息的本质。我用谷歌搜索了 where is the "applies to list" in vba excel以及其中的一些变体,都带有如图所示的引号,这应该
我是一名优秀的程序员,十分优秀!