【发布时间】:2014-03-31 12:55:42
【问题描述】:
我们有一个(奇怪的?)要求来创建同一个类的 X 个实例,并且我们正在使用 Ninject 进行 IoC。显然我们可以通过多次请求相同类型的对象来手动完成:
for (var i = 0; i <= 10; i++)
{
var obj = _kernel.GetService(typeof(MyType));
...
}
这按预期工作,但现在我们必须在我们的代码中访问内核才能做到这一点,那“味道”。我更喜欢在绑定中处理这个,有点像 InRequestScope 的东西。
为了给这一切增加一点复杂性,我们还指定了它自己的对象上的实例数,所以上面的代码实际上更接近于这个: var obj = (MyType)_kernel.GetService(typeof(MyType));
for (var i = 0; i <= obj.NumberOfInstances; i++)
{
var obj = _kernel.GetService(typeof(MyType));
...
}
最后一件事是让它变得一团糟;我们使用 Ninject Conventions 将实现绑定到基础: var 程序集 = AppDomain.CurrentDomain.GetAssemblies();
this.Bind(x => x
.From(assemblies)
.SelectAllClasses()
.InheritedFrom<BaseMyType>()
.BindAllBaseClasses());
我希望能够使用的实现是这样的:
this.Bind(x => x
.From(assemblies)
.SelectAllClasses()
.InheritedFrom<BaseMyType>()
.BindAllBaseClasses()
.Configure(syntax => syntax.InMultipleScope()));
但这可能会也可能不会,或者是个好主意......
有人做过这样的事吗?或者也许您可以看到不同的做法?
关于要求的详细信息:我们在单个 Azure Worker Role 中创建多个线程,运行相同代码的多个副本会很有好处。
【问题讨论】:
标签: c# azure ninject azure-worker-roles ninject-extensions