- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚刚开始学习 IoC 和依赖注入(inject)。我正计划做一个 MonoTouch 项目并想使用 TinyIoC 但我想先测试一下。我正在创建一个虚拟信用卡处理控制台应用程序,但由于我有多个接口(interface)实现,所以我在配置 TinyIoC 时遇到了问题。这是我的测试应用。
接口(interface):
public interface IPaymentProcessor
{
void ProcessPayment(string cardNumber);
}
接口(interface)的两个实现:
VisaPaymentProcessor
public class VisaPaymentProcessor : IPaymentProcessor
{
public void ProcessPayment(string cardNumber)
{
if (cardNumber.Length != 13 && cardNumber.Length != 16)
{
new ArgumentException("Card Number isn't the correct length");
}
// some code for processing payment
}
}
美国运通支付处理器
public class AmexPaymentProcessor : IPaymentProcessor
{
public void ProcessPayment(string cardNumber)
{
if (cardNumber.Length != 15)
{
new ArgumentException("Card Number isn't the correct length");
}
// some code for processing the payment
}
}
简单的东西。现在我有一个类接受接口(interface)作为构造函数中的参数....
信用卡处理器
public class CreditCardProcessor
{
public IPaymentProcessor PaymentProcessor { get; set; }
public CreditCardProcessor(IPaymentProcessor processor)
{
this.PaymentProcessor = processor;
}
public void ProcessPayment(string creditCardNumber)
{
this.PaymentProcessor.ProcessPayment(creditCardNumber);
}
}
我的控制台应用程序看起来像这样....
class Program
{
static void Main(string[] args)
{
TinyIoCContainer.Current.AutoRegister();
var creditCardProcessor = TinyIoCContainer.Current.Resolve<CreditCardProcessor>();
creditCardProcessor.ProcessPayment("1234567890123456"); // 16 digits
}
}
所以我想弄清楚如何告诉 Resolve
将接口(interface)的哪个实现传递给构造函数。如果我运行这段代码,我将始终使用 VisaPaymentProcessor
实现。
那么我怎样才能让 TinyIoC 将 AmexPaymentProcessor
实现传递给构造函数而不是 VisaPaymentProcessor
(这似乎是默认的)?
最佳答案
我自己没有用过 TinyIoC,但我怀疑你想要:
TinyIoCContainer.Current.Register(typeof(IPaymentProcessor),
typeof(AmexPaymentProcessor));
(如果你想使用 Amex。)
还有各种其他可用的 Register
重载,包括一个使用名称 的重载,这在您解析时可能很有用。这实际上取决于您要实现的目标,这在问题中并不是很清楚。
关于c# - TinyIoC - 接口(interface)的多种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10421505/
Autofac 允许使用 .AsImplementedInterfaces() 或链式 .As<>() 调用与 .SingleInstance() 一起非常轻松地将多个接口(interface)解析为
我已经使用 Nancy 一段时间了,我想我已经把自己困在了一个盒子里,无法跳出它来思考我在使用 Nancy 时的错误。我确实看到的选项我不太喜欢。如果我错过了一些可以帮助我的功能,或者我没有很好地列出
我有一个 Nancy API,并创建了一个继承自 DefaultNancyBootstrapper 的自定义 Bootstraper。 我还有具体类型ConcreteFoo,我想在请求范围内绑定(bi
我正在研究用于 ASP.NET MVC 应用程序的 TinyIOC。 我想做的是使用工厂方法根据请求将一些接口(interface)注册为单例。 var container = TinyIoC.Tin
我正在尝试在一个带有 NancyFX 的项目上实现选项模式(如推荐的 here )/TinyIOC但它不起作用。 我正在 Startup.cs.ConfigureServices 上注册选项方法,但是
假设我有一个通用接口(interface)和一个通用实现。我如何注册所有用途? 具体来说,我有以下内容(为简单起见减少了): public interface IRepository where T
我正在尝试让 TinyIoC 在 Xamarin.iOS 上运行,但我的运气并不好。我的项目链接器设置为“仅链接 SDK 程序集”。 我真的在做这么简单的事情: public interface IP
我刚刚从 Ninject 更改为 TinyIoC 以进行依赖项注入(inject),但我在构造函数注入(inject)方面遇到了麻烦。 我已经设法将它简化为这个片段: public interface
我刚刚开始学习 IoC 和依赖注入(inject)。我正计划做一个 MonoTouch 项目并想使用 TinyIoC 但我想先测试一下。我正在创建一个虚拟信用卡处理控制台应用程序,但由于我有多个接口(
我有一个接口(interface)IRofl,它有一个名为DefaultRofl 的实现,具有以下构造函数签名: public DefaultRofl(ICanHasCheezburger cheez
我正在构建一个小型 Nancy Web 项目。 在我的一个类(不是 nancy 模块)的方法中,我想基本上做: var myThing = TinyIoC.TinyIoCContainer.Curre
我正在尝试使用 TinyIoC 在 MonoTouch 中使用依赖注入(inject),但是我似乎无法弄清楚我应该在哪里进行注册,以及在我的 Controller 中注入(inject)我的服务的构建
设置:我有一个几乎开箱即用的 Nancy + TinyIoC 设置,运行一个运行良好的网络服务。它取决于各种 (AsSingleton) 服务类。然而,这些并没有作为单例注入(inject),每次都会
这让我发疯......我有一个网络 API 项目。我的行为很奇怪。我正在调试器中运行它并使用 fiddler 调用方法。发生的情况是,当我在 build 后第一次在 debug 中运行 API 时,该
我是南希的菜鸟。我一直将它用作生成 REST API 的框架。我熟悉 Json.NET,所以我一直在玩 Nancy.Serialization.JsonNet 包。 我的目标:自定义 JsonNetS
所以我使用 Nancy + TinyIoC 来运行一个小型网络服务。这行得通。现在我需要创建一个 Quartz 作业,它需要一些相同的依赖项,理想情况下我想使用 Nancy 的 TinyIoC 来注入
我收到 TinyIOC 无法解析类型异常。我使用 Xamarin studio for ipad 开发了我的应用程序。在模拟器中它工作正常。但是在部署 ipad 时出现以下错误。 TinyIoC.Ti
所以我使用 Nancy + TinyIoC 来运行一个小型网络服务。这行得通。现在我需要创建一个 Quartz 作业,它需要一些相同的依赖项,理想情况下我想使用 Nancy 的 TinyIoC 来注入
我收到 TinyIOC 无法解析类型异常。我使用 Xamarin studio for ipad 开发了我的应用程序。在模拟器中它工作正常。但是在部署 ipad 时出现以下错误。 TinyIoC.Ti
我是一名优秀的程序员,十分优秀!