使用Asp.Net MVC和Web Api配置Ninject
|
我已经设置了我的项目与Ninject IoC。
我的常规MVC控制器实现; public class GalleryController : BaseController
{
public GalleryController(IUow uow)
{
Uow = uow;
}
........
}
与常规控制器一起使用时出错 An error occurred when trying to create a controller of type 'Web.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.] 但是,当我尝试与Web Api相同的代码,它的工作原理 public class GalleryController : BaseApiController
{
public GalleryController(IUow uow)
{
Uow = uow;
}
......
}
我的界面保存差异存储库(工厂模式) public interface IUow
{
// Save pending changes to the data store.
void Commit();
//Repositoryries
IRepository<Gallery> Gallery { get; }
IMenuRepository Menus { get; }
}
NinjectDependencyScope类; public class NinjectDependencyScope : IDependencyScope
{
private IResolutionRoot resolver;
internal NinjectDependencyScope(IResolutionRoot resolver)
{
Contract.Assert(resolver != null);
this.resolver = resolver;
}
public void Dispose()
{
var disposable = resolver as IDisposable;
if (disposable != null)
disposable.Dispose();
resolver = null;
}
public object GetService(Type serviceType)
{
if (resolver == null)
throw new ObjectDisposedException("this","This scope has already been disposed");
return resolver.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
if (resolver == null)
throw new ObjectDisposedException("this","This scope has already been disposed");
return resolver.GetAll(serviceType);
}
}
NinjectDependencyResolver类; public class NinjectDependencyResolver : NinjectDependencyScope,IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver(IKernel kernel)
: base(kernel)
{
this.kernel = kernel;
}
public IDependencyScope BeginScope()
{
return new NinjectDependencyScope(kernel.BeginBlock());
}
}
Global.asax的Ninject配置; public class IocConfig
{
public static void RegisterIoc(HttpConfiguration config)
{
var kernel = new StandardKernel(); // Ninject IoC
//kernel.Load(Assembly.GetExecutingAssembly()); //only required for asp.net mvc (not for webapi)
// These registrations are "per instance request".
// See http://blog.bobcravens.com/2010/03/ninject-life-cycle-management-or-scoping/
kernel.Bind<RepositoryFactories>().To<RepositoryFactories>()
.InSingletonScope();
kernel.Bind<IRepositoryProvider>().To<RepositoryProvider>();
kernel.Bind<IUow>().To<Uow>();
// Tell WebApi how to use our Ninject IoC
config.DependencyResolver = new NinjectDependencyResolver(kernel);
}
}
Global.asax protected void Application_Start()
{
// Tell WebApi to use our custom Ioc (Ninject)
IocConfig.RegisterIoc(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfig.CustomizeConfig(GlobalConfiguration.Configuration);
AreaRegistration.RegisterAllAreas();
}
解决方法我已经写了一些要点来帮助配置Ninject与MVC和Web Api。只需包括文件:> https://gist.github.com/odytrice/5821087(for MVC) 要为具体类型添加绑定,只需将它们放在MainModule的Load()方法中。您可以创建尽可能多的模块,以保持绑定的组织。但您还必须将它们添加到Modules属性中返回的数组。 然后添加到Application_Start()方法 > NinjectContainer.RegisterModules(NinjectModules.Modules)(for MVC) 注意,您可以为MVC和WebApi注册使用相同的NinjectModules.Modules。我只是分开它为了清楚 更新:记住从您的项目中删除NinjectWebCommon.cs,因为它加载和引导一个新的内核在运行时,不幸的是只有为MVC。 更新:你也可以使用 > NinjectContainer.RegisterAssembly()(for MVC) 这将扫描所有模块的当前装配。这样,您可以将模块放置在项目的任何位置,它将被注册 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在ASP.NET成员资格中访问UserId而不使用Membership.Get
- ASP.NET MVC在IIS6上
- asp.net-mvc-3 – ASP.MVC 3 Razor在Html.PartialView扩展中
- 内容管理 – ASP.NET建议[已结束]
- asp.net – 使用以前输入的值防止文本框自动填充
- asp.net-mvc – 将焦点放在不使用JavaScript的EditorFor上
- asp.net-mvc – 保持控制器瘦(太多的动作方法)
- asp.net-mvc – 用于ASP.NET MVC的Spark T4模板
- asp.net-mvc – @ Html.ValidationSummary(true) – 真正的
- asp.net-mvc-4 – 使用MVC 4 SimpleMembership与现有的数据
- 如何在不使用MembershipProvider的情况下使用ASP
- asp.net-mvc – 疑难解答反伪造令牌问题
- asp.net-mvc-3 – 如何添加整数列表到路由
- asp.net-mvc – 如何在asp.net mvc中的静态类中获
- asp.net-mvc – 在ASP.NET MVC 4中的用户控制等效
- 在Kendo-UI图表中刷新方法和重绘方法有什么不同?
- 如何在服务器控件属性中使用ASP.NET %=标签?
- asp.net – 设置Response.Status生成“HTTP状态字
- asp.net-mvc-3 – 在MVC Razor View中使用If语句
- asp.net – 如何使用占位符属性与Html.EditorFor
