我有一個應用程序,仿照從Apress的臨ASP.NET MVC使用溫莎城堡的IoC實例有各自的資料庫控制器的一個,這是工作的罰款ASP.NET MVC使用溫莎城堡的IoC
例如
public class ItemController : Controller
{
private IItemsRepository itemsRepository;
public ItemController(IItemsRepository windsorItemsRepository)
{
this.itemsRepository = windsorItemsRepository;
}
與
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Castle.Windsor;
using Castle.Windsor.Configuration.Interpreters;
using Castle.Core.Resource;
using System.Reflection;
using Castle.Core;
namespace WebUI
{
public class WindsorControllerFactory : DefaultControllerFactory
{
WindsorContainer container;
// The constructor:
// 1. Sets up a new IoC container
// 2. Registers all components specified in web.config
// 3. Registers all controller types as components
public WindsorControllerFactory()
{
// Instantiate a container, taking configuration from web.config
container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
// Also register all the controller types as transient
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(IController).IsAssignableFrom(t)
select t;
foreach (Type t in controllerTypes)
container.AddComponentWithLifestyle(t.FullName, t, LifestyleType.Transient);
}
// Constructs the controller instance needed to service each request
protected override IController GetControllerInstance(Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
}
}
控制控制器創建。
我有時需要在控制器內創建其他存儲庫實例,從其他地方獲取數據,我可以使用CW IoC來完成這項工作嗎?如果是,那麼該怎麼做?
我一直在玩新控制器類的創建,因爲它們應該自動註冊我的現有代碼(如果我可以得到這個工作,我可以稍後正確註冊它們),但是當我嘗試實例化它們時是一個明顯的反對意見,因爲我無法爲構造函數提供一個repos類(我確信這是無論如何都是錯誤的方式)。
任何幫助(特別是例子)將不勝感激。 乾杯 MH
你最後的結論是什麼?我有同樣的設計問題。 – Jon 2011-01-14 12:46:00
看了這個之後不久,我在應用程序中發現了一處內存泄漏,它來自Castle Windsor代碼中的某個地方(無論是我使用它的方式是否正確,我不知道,但是我是在使用它簡單的水平,所以我不是100%確定它_was_我),所以我沒有得到解決這些解決方案 - 對不起。如果你嘗試下面的解決方案,它的工作原理,請讓我知道,我會標記爲正確的。 – 2011-01-18 09:39:31