【发布时间】:2017-04-24 22:10:41
【问题描述】:
我通过Ninject 在这样的对象上注入了工厂绑定。
[Inject]
public Func<TNewDocument> DocumentFactory { get; set; }
我们这样称呼它
var newDoc = DocumentFactory()
第一次调用 DocumentFactory() 成功。
随后的调用导致 Ninject 报告在激活点有多个TNewDocument 绑定。
我修改了我的代码直接调用内核而不是使用工厂。我做了
var docs Kernel.GetAll<TNewDocument>().ToList();
if(docs.Count!=1){
Console.WriteLine("boo");
}
return docs[0]; // A work around to stop the app crashing
我检查了GetAll 调用实际返回的对象数量。每次调用创建新对象时,此数字都会增加。
第一次返回一个对象。第二次两个对象,第三次三个等等。
我们 git 将存储库一分为二以发现重大更改。这是对ReactiveUI 7.1 to 7.2 的升级。除了 nuget 所做的更改之外,没有其他代码更改。
然而 ReactiveUI 只和 Ninject 有一个基本的关系。我必须为 RxUI 提供一个服务定位器,如下所示。
var customResolver = new FuncDependencyResolver(
(service, contract) =>
{
if (contract != null) return kernel.GetAll(service, contract);
var items = kernel.GetAll(service);
var list = items.ToList();
return list;
},
(factory, service, contract) =>
{
var binding = kernel.Bind(service).ToMethod(_ => factory());
if (contract != null) binding.Named(contract);
});
Locator.Current = customResolver;
我不明白为什么升级 RxUI 会导致这个问题。有什么想法吗?
【问题讨论】:
标签: c# ninject reactiveui