我使用.NET 4.5,Ninject 3 the binding by convention lib如下:Ninject绑定通过公约没有泛型类型的工作
kernel.Bind(x => x
.FromAssembliesMatching("assembly.dll")
.SelectAllClasses().InheritedFrom(typeof(ICommandHandler<>))
.BindAllInterfaces());
,这是正确的约束力的:
public class MyCommandHandler : ICommandHandler<MyCommand>
但没有按't bind:
public class MyGenericCommandHandler<T> : ICommandHandler<MyGenericCommand<T>>
但是,pre vious结合的作品,如果我想补充的具体实施我的泛型类的单个绑定,如:
kernel.Bind(typeof(ICommandHandler<MyGenericCommand<float>>))
.To(typeof(MyGenericCommandHandler<float>))
kernel.Bind(typeof(ICommandHandler<MyGenericCommand<int>>))
.To(typeof(MyGenericCommandHandler<int>))
但是,增加每一个人泛型类型违背公约的目的,需要对每个可能的个别类型如float添加绑定,整型,字符串,等等
你知道如何修改公约或添加(配有一个完全不同的解决方案,甚至 )另外一个支持通用 版本我的命令吗?即支持两级仿制药。
这听起来不像是你做错了什么或疯狂的事情,丁丁我不清楚你想要什么。一个开放的泛型类不能被实例化,但是你可以做[像这样的东西](http://stackoverflow.com/questions/11682495/ninject-and-binding-generics)。你能澄清一下'TParameter'是什么,你是如何指定你想要的'Type'的,并且放入更多的例外是没有害处的。 –
@RubenBartelink我的确改善了这个问题,并给出了一个更具体的例子。我希望这回答了你的问题。 – Adam
你有没有从[并因此实现] ICommandHandler>这个消息说你不?它是公开的吗?是必需的类型的开放通用?通常人们有一个开放的通用级别 - ICommandHandler <>'然后有一个实现类的具体类。不幸的是我现在更困惑,但希望别人能看到你想要做什么 –