我们已经在我们公司的标准应用。 现在我想在注入应用一些自定义组件。
一般来说,如果你有一个ninject内核或统一的容器,你可以像下面的执行:
IKernel kernel = new StandardKernel();
DealerService myServ = new DealerService(kernel.Get<IDealerController>());
DealerService:
public partial class DealerService : ServiceBase
{
private readonly IDealerController Controller;
public DealerService(IDealerController controller)
{
Controller = controller;
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Process();
}
protected override void OnStop()
{
}
public void Process()
{
Controller.GetDealerDetails(5);
}
}
DealerController接口
public interface IDealerController
{
Dealer GetDealerDetails(int dealerId);
}
经销商控制的执行情况:
public class DealerController : IDealerController
{
public Dealer GetDealerDetails(int dealerId)
{
throw new NotImplementedException("This is a custom error thrown from the controller implementation");
}
}
现在的事情是,我不希望这样的标准应用程序知道的自定义组件。 该dealerservice是一个工作流活动,以便通过工作流程的基础动态发现的。 问题是,注入的DealerController
是空的......我怎么能注入的实施IDealerController
我standardapplication没有行kernel.Get<IDealerController>()
如果使用Ninject与ninject MVC 3 NuGet包中,实现在MVC控制器的构造注入而不调用kernel.Get<IDealerController>()
编辑:增加了模块的组件以使模块被命名惯例发现命名Ninject.Extensions.Controllers.Module。 这在Ninject中描述文档 。 这部作品在我的MVC应用程序。
public class ControllersModule : NinjectModule
{
public override void Load()
{
this.Bind<IDealerController>().To<DealerController>();
}
}