我现在在我的 MVC 3 项目中遇到 Unity 2 的大麻烦。
我创建了一个抽象的 BaseViewPage ,所有视图页都继承自它。在这我有2个依赖项。到目前为止,一切都很好。现在我有 3 个从 BaseViewPage 继承的不同 Viewpage。这些使用泛型将一些特定数据传递给视图。到目前为止,一切都很好。现在问题来了。在我的家庭控制器中,我使用统一来解决其中一个视图页面。视图页在我调试时正确加载,但在我调用 return view("index", model); 之后立即加载。unity 调用 baseviewpage 中的这些依赖项之一。这是在 httpcontext 为空时完成的。
Unity 配置(加载所有视图页面):
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;
}
}
现在在我的家庭控制器中,我首先依赖于后端(以测试它是否有效),然后在索引中我使用统一来解析一个通用视图页面:
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。TheLogin 引发错误,因为不存在 HttpContext。问题是,为什么统一尝试访问它?我已经在 BackendWrapper 和 UserIdent 内部实现了一个处理,但统一忽略它们并仍然调用 TheLogin。
在 BackendWrapper 内部,我有一个构造函数,它调用外部 dll 来创建新的 UserIdent。因此,Unity 没有解决任何问题。但是统一仍然试图访问它。此外,如果我从 BaseViewPage 中删除依赖项,它会完美运行。所以只有当 BaseViewPage 依赖于 BackendWrapper 时才会出现这个问题。我是否正确配置它?