[英]Equivalent Simple Injector .Register invocations
我有一个 object 的构造函数需要一个原语。 我使用委托注册它(请原谅人为的例子)。
container.Register<Account>(() => new Account(1000M), Lifestyle.Singleton);
我将这种类型的Account
注册为接口IAccount
的实现。 当使用下面标记为B
的调用这样做时,SimpleInjector 的 .Verify .Verify()
会抱怨:
/* B */container.Register<IAccount, Account>(Lifestyle.Singleton);
Account类型的构造函数包含decimal类型的参数'funds',不能用于构造函数注入,因为它是一个值类型。 (参数'TImplementation')
使用标记为A
的调用没有此类问题,并且可以按预期工作:
/* A */container.Register<IAccount>(() => container.GetInstance<Account>(), Lifestyle.Singleton);
我似乎错误地假设A
和B
实际上是等效的。 我错过了什么? 为什么B
没有使用注册的委托来创建Account
实例? 谢谢你。
(以下文件为 LINQPad (.linq) 格式)
<Query Kind="Program">
<NuGetReference>SimpleInjector</NuGetReference>
<Namespace>SimpleInjector</Namespace>
</Query>
void Main()
{
var containerRegistry = new ContainerRegistry();
Console.WriteLine("Balance = " + containerRegistry.GetInstance<Account>().Balance);
}
public class ContainerRegistry
{
private readonly Container container = new Container();
public ContainerRegistry()
{
container.Register<Account>(() => new Account(1000M), Lifestyle.Singleton);
/* A */container.Register<IAccount>(() => container.GetInstance<Account>(), Lifestyle.Singleton);
/* B */container.Register<IAccount, Account>(Lifestyle.Singleton);
container.Verify();
}
[Obsolete] public TInstanceType GetInstance<TInstanceType>() where TInstanceType : class
=> container.GetInstance<TInstanceType>();
}
public class Account : IAccount
{
public decimal Balance => funds;
private readonly decimal funds;
public Account(decimal funds)
{
this.funds = funds;
}
}
public interface IAccount
{
decimal Balance { get; }
}
尝试这个:
container.Register<IAccount>(() => new Account(1000M), Lifestyle.Singleton);
♡
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.