我试图让这个工作,我找不到一个好的解决方案。我知道StructureMap可以做到这一点,但我坚持使用Ninject。将通用接口类型连接到不同的实现
我有什么:
public interface IFormHandler<T>
{
void Handle(T form);
}
我想实现多类像这样的:
public class RegioDeleteModelFormHandler:IFormHandler<RegioDeleteModel>
{
public void Handle(RegioDeleteModel form)
{
//implement method here
}
}
或者这一个:
public class RegioUpdateModelFormHandler:IFormHandler<RegioUpdateModel>
{
public void Handle(RegioUpdateModelform)
{
//implement method here
}
}
别的地方的代码,我希望能够这样称呼:
var handler = DependencyResolver.Current.GetService<IFormHandler<T>>();
返回正确的IFormhandler。
有没有办法做到这一点?如果Ninject无法做到这一点,是否有解决方法?目前,我只有Ninject的基本NuGet包。有什么我可以使用一个相关的软件包吗?
为了完整起见,这里是我的DependencyResolverclass:
公共类NinjectDependencyResolver:{的IDependencyResolver私人 内核的iKernel;
public NinjectDependencyResolver() {
kernel = new StandardKernel();
AddBindings();
}
public object GetService(Type serviceType) {
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType) {
return kernel.GetAll(serviceType);
}
public IBindingToSyntax<T> Bind<T>() {
return kernel.Bind<T>();
}
public IKernel Kernel {
get { return kernel; }
}
private void AddBindings() {
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
在此先感谢!
编辑我的编辑:也许我应该补充一点,我在上面,并且它的工作AddBindings方法试过了,但是这是一个大量的代码,如果我这样做对所有可能的IFormHandlers:
Bind<IFormHandler<RegioDeleteModel>>().To<RegioDeleteModelFormHandler>();
谢谢!这样可行。 – Jeroen