我在GeneralRegistry中有这个配置:
ForRequestedType<IClientBonusHistoryLoadTask>().AlwaysUnique().TheDefaultIsConcreteType<ClientBonusHistoryLoadTask>();
我有这段代码:
public ClientAdvantagesUpdateTask(IBaseRepo<Client> repository, INHUnitOfWorkProvider uowProvider, IClientBonusHistoryLoadTask clientBonusHistoryLoadTask, ClientBonusHistoryLoadTask masterClientBonusHistoryLoadTask) : base(repository, uowProvider)
{
_clientBonusHistoryLoadTask = clientBonusHistoryLoadTask;
_masterClientBonusHistoryLoadTask =
masterClientBonusHistoryLoadTask;
bool y = clientBonusHistoryLoadTask.Equals
(masterClientBonusHistoryLoadTask);
var task = ObjectFactory.GetInstance<IClientBonusHistoryLoadTask>
();
var task2 =
ObjectFactory.GetInstance<IClientBonusHistoryLoadTask>();
bool x = task.Equals(task2);
}
由于某种原因,y为真(这是问题),x为假 (按预期工作)。这是一个错误,还是我在做什么 错?
答案 0 :(得分:1)
嗨我有同样的问题,总是独一无二的并不能让它永远不变。 但是几乎没有文件可以知道它应该做什么。 我使用以下内容:
"For^ILeadRepository^().Use^LeadRepository^();"
^应该是一个括号。我出于某种原因不能在这里打字。
然后在对象工厂方法中:
" LeadRepository instance = ioc.GetInstance^LeadRepository^();
ioc.Inject(typeof(ILeadRepository), instance);
ioc.Inject(typeof(LeadRepository), instance); "
其中ioc是IContainer。 再次,我不确定Inject是否应该像这样使用,但这总是相同的 在注入代码运行后,引导ioc容器的LeadRepository实例。 希望这有帮助,或者有人可以发布它应该如何完成。 我不喜欢使用静态工厂或静态方法,所以我创建了自己的工厂,这个工厂内的所有东西都使用上面的代码从ioc容器中抽出独特的实例。
-----假设你想要一个独特的实例,那就是每个工厂的singelton。 并且您总是希望返回相同的实例。我发现了一种更好的方法,即在工厂中使用子容器:
e.g。
myParentContainer = new Container(
x =>
{
x.AddRegistry<ObjectFactoryModelRegistry>();
x.AddRegistry<ServiceRegistry>();
});
myIoc = myParentContainer.GetNestedContainer();
myIoc.AssertConfigurationIsValid();
..然后可以使用以下代码获取相同的实例:
myIoc.GetInstance<T>;