我有6个项目。
换句话说,有以下依赖关系图:
我想将所有依赖项放在DependencyInjection项目中。抽象地说,我想把这段代码:
Bind<UnitOfWork>().To<UnitOfWork>();
Bind<IAccountService>().To<AccountService>();
......
DependencyInjection项目中的任何位置。然后我想写:
public class HomeController : BaseController
{
private readonly IAccountService accountService;
public HomeController(IAccountService accountService)
{
this.accountService = accountService;
}
public ActionResult Index()
{
accountService.DepositMoney(10);
return View();
}
}
并有工作申请。
我是怎么做到的?我尝试了从NinjectModule继承的创建类(例如,我有以下类:
public class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<UnitOfWork>().To<UnitOfWork>();
Bind<IAccountService>().To<AccountService>();
}
}
然后,在Global.asax.cs(ASP.NET MVC 5项目)中,我编写了以下代码:
public class MvcApplication : NinjectHttpApplication
{
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected override IKernel CreateKernel()
{
var modules = new INinjectModule[]
{
new InfrastructureModule(),
new ServiceModule()
};
var kernel = new StandardKernel(modules);
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
}
然后,我在Web.config中添加以下代码:
<system.web>
<httpModules>
<add name="NinjectHttpModule" type="Ninject.Web.Common.NinjectHttpModule"/>
</httpModules>
</system.web>
结果,我有一个例外:
激活IntPtr时出错 没有匹配的绑定可用,并且该类型不可自绑定。 激活路径:
3)将依赖IntPtr注入到Func {IKernel}
类型的构造函数的参数方法中2)将依赖关系Func {IKernel}注入到HttpApplicationInitializationHttpModule类型的构造函数的参数lazyKernel中
1)请求IHttpModule
我感到困惑。我会很高兴任何建议。