我使用Unity的MVC项目突然停止解析我的控制器中的类型。我正在将设置与新制作的mvc应用程序与Unity nuget包进行比较 - 我看不出任何差异。我的应用程序以前工作过。
我很想开始一个新的应用程序,并从这个应用程序中慢慢移动代码以开始识别问题,但我想我可以在这里寻求一些有用的帮助。
protected void Application_Start()
{
log4net.Config.XmlConfigurator.Configure();
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
UnityConfig2.GetConfiguredContainer().AddNewExtension<Log4NetExtension>();
UnityConfig2.GetConfiguredContainer().RegisterType<ITest, Test>();
}
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(xxx.App_Start.UnityWebActivator), "Start")]
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(xxx.App_Start.UnityWebActivator), "Shutdown")]
namespace xxx.App_Start
{
/// <summary>Provides the bootstrapping for integrating Unity with ASP.NET MVC.</summary>
public static class UnityWebActivator
{
/// <summary>Integrates Unity when the application starts.</summary>
public static void Start()
{
var container = UnityConfig2.GetConfiguredContainer();
FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));
var resolver = new UnityDependencyResolver(container);
DependencyResolver.SetResolver(resolver);
// TODO: Uncomment if you want to use PerRequestLifetimeManager
Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
}
/// <summary>Disposes the Unity container when the application is shut down.</summary>
public static void Shutdown()
{
var container = UnityConfig2.GetConfiguredContainer();
container.Dispose();
}
}
}
在我的HomeController.cs文件中,我只添加一个依赖项:
[Dependency]
public ITest test { get; set; }
通过这种设置,我得到一个例外:当前类型xxx.ITest是一个接口,无法构造。你错过了类型映射吗?
如果我在RegisterType&lt;&gt;()方法调用之后放置一个断点并执行
UnityConfig2.GetConfiguredContainer().Resolve<ITest>()
立即窗口分辨率内的成功。
此外,将此代码放在Index方法中并注释掉依赖项属性会成功解析实体:
var container = UnityConfig2.GetConfiguredContainer();
var test = container.Resolve<ITest>();
任何人对如何进一步调查此问题都有任何想法?
答案 0 :(得分:0)
问题是由于一些早期的重构,当我把它转移到另一个项目时,我没有记得从另一个项目中删除UnityWebActivator。所以我有两个容器和两个启动方法。