我正试图让这个工作,我找不到一个好的解决方案。我知道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:
public class NinjectDependencyResolver:IDependencyResolver { 私有内核;
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>();
答案 0 :(得分:1)