我使用.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 <>'然後有一個實現類的具體類。不幸的是我現在更困惑,但希望別人能看到你想要做什麼 –