我们公司有一个标准应用程序。 现在我想在应用程序中注入一些自定义程序集。在标准应用程序中注入自定义代码
一般来说,如果你有一个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");
}
}
现在的事情是我不希望标准应用程序知道自定义程序集。经销商服务是一个工作流活动,因此可以通过工作流基础动态找到。问题是注入的DealerController
是空的... 如何在我的标准应用程序中注入IDealerController
的实现,而不需要行kernel.Get<IDealerController>()
。
如果您将Ninject与ninject MVC 3 nuget包一起使用,则将实现注入到mvc控制器的构造函数中,而不用调用kernel.Get<IDealerController>()
。
编辑: 加入所以该模块是通过命名约定发现作为集名称Ninject.Extensions.Controllers.Module该模块。这在Ninject documentation中描述。这在我的MVC应用程序中起作用。
public class ControllersModule : NinjectModule
{
public override void Load()
{
this.Bind<IDealerController>().To<DealerController>();
}
}
您是否知道'Modules'和'Kernel.Load'机制(并且可以使用该上下文中的teminology来澄清您的问题)? – 2013-03-18 21:03:11
我在上面添加了我的模块。 – 2013-03-19 08:02:33