[英]How to inject different dependencies into WebApi Controller using StructureMap
[英]How to use StructureMap to inject repository classes to the controller?
在當前應用程序中,我正在使用一個自定義ControllerFactory類,該類創建一個控制器並自動設置Elmah ErrorHandler。
public class BaseControllerFactory : DefaultControllerFactory
{
public override IController CreateController( RequestContext requestContext, string controllerName ) {
var controller = base.CreateController( requestContext, controllerName );
var c = controller as Controller;
if ( c != null ) {
c.ActionInvoker = new ErrorHandlingActionInvoker( new HandleErrorWithElmahAttribute() );
}
return controller;
}
protected override IController GetControllerInstance( RequestContext requestContext, Type controllerType ) {
try {
if ( ( requestContext == null ) || ( controllerType == null ) )
return base.GetControllerInstance( requestContext, controllerType );
return (Controller)ObjectFactory.GetInstance( controllerType );
}
catch ( StructureMapException ) {
System.Diagnostics.Debug.WriteLine( ObjectFactory.WhatDoIHave() );
throw new Exception( ObjectFactory.WhatDoIHave() );
}
}
}
我想使用StructureMap在我的控制器中注入一些代碼。 例如,我想在其中自動注入存儲庫類。
我已經創建了我的存儲庫類,並且還向接收該存儲庫類的控制器添加了一個構造函數
public FirmController( IContactRepository contactRepository ) {
_contactRepository = contactRepository;
}
然后,我已經在StructureMap中注冊了類型
ObjectFactory.Initialize( x => {
x.For<IContactRepository>().Use<MyContactRepository>();
});
我應該如何更改CreateController方法中的代碼以將IContactRepository
具體類注入到FirmController
?
編輯 :
我已經將BaseControllerFactory更改為使用Structuremap。 但我在網上遇到了一個例外
return (Controller)ObjectFactory.GetInstance( controllerType );
有什么提示嗎?
在輸入解決方案之前,我建議使用Container類型初始化SM而不是ObjectFactory
最好的方法是從StructureMap框架的Registry類中繼承一個類。 因此,我的注冊表將類似於
public class MyAppRegistry : Registry
{
public MyAppRegistry()
{
For<IContactRepository>().Use<MyContactRepository>();
}
}
然后告訴SM在配置過程中使用此注冊表。
var container = new Container(x=>x.AddRegistry(new MyAppRegistry());
這可以從Global.asax中的Application_Start中完成。 上一行之后,在mvc中將ControllerBuilder設置為使用BaseControllerFactory。 現在,SM應該能夠解決所有依賴性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.