我現在在我的MVC 3項目中遇到了Unity 2的大麻煩。Unity 2在泛型中表現得很奇怪
我已經創建了一個抽象BaseViewPage,所有視圖頁面都從中繼承。在這我有2個依賴。到現在爲止還挺好。 現在我有3個不同的ViewPages從BaseViewPage繼承。這些使用泛型向視圖提供一些特定的數據。到現在爲止還挺好。 現在出現這個問題。 在我的homecontroller中,我使用unity來解析其中一個視圖頁面。當我調試它時正確加載視圖頁,但正好在我的調用返回視圖(「索引」,模型)後;統一調用基本視圖頁面內的其中一個依賴關係。這在httpcontext爲空時完成。
統一配置(加載所有viewpages):
container.RegisterType<IBackendWrapper, BackendWrapper.BackendWrapper>(new PerThreadLifetimeManager());
container.RegisterType<BaseViewPage, EmptyViewPage>("EmptyViewPage");
container.RegisterType(typeof(BaseViewPage), typeof(GenericViewPage<>), "GenericViewPage");
container.RegisterType(typeof(BaseViewPage), typeof(GenericIEnumerableViewPage<>), "GenericIEnumerableViewPage");
BaseViewPage和一個通用視圖頁面(其他通用的網頁看起來幾乎一樣):
public abstract class BaseViewPage
{
[Dependency]
public IBackendWrapper Backend { get; set; }
....
}
public class GenericViewPage<T> : BaseViewPage
{
public T Model { get; set; }
public GenericViewPage(T model)
: base()
{
Model = model;
}
}
現在,在我的家鄉控制器I首先依賴於後端(以測試它的工作原理),然後在索引內部我使用統一來解析一個通用視圖頁面:
public class HomeController : Controller
{
[Dependency]
public IBackendWrapper Backend { get; set; }
public ActionResult Index(MvcLoginUser user)
{
var model = UnityGlobalContainer.Container.Resolve<GenericViewPage<MvcLoginUser>>("GenericViewPage");
return View("Index", model);
}
}
現在返回後,Unity會調用BackendWrapper對象。更確切地說BackendWrapper.UserIdent.TheLogin。由於不存在HttpContext,因此登錄引發錯誤。問題是,爲什麼團結試圖訪問它?我在BackendWrapper內部和UserIdent內實現了一個dispose,但統一忽略它們並仍然調用TheLogin。
Inside the BackendWrapper我有一個構造函數調用外部DLL來創建一個新的UserIdent。所以它沒有任何統一解決。但團結仍然試圖訪問它。 此外,如果我從BaseViewPage中刪除依賴項,它完美的作品。所以只有當BaseViewPage對BackendWrapper有一個依賴時纔會出現這個問題。 我配置正確嗎?