网站的初始部署工作正常。大约2-3个小时后,控制器突然无法实例化,因为依赖无法解决(或者至少是错误消息告诉我的)。
我尝试了各种各样的东西,但似乎都没有解决它。有没有人有任何想法我可以检查?
答案 0 :(得分:0)
最近我们遇到了一个与拦截器类似的情况。突然间它就不再起作用了。我们拦截对程序集X.Y.Z. dll 中定义的接口的所有调用。但操作系统决定在一段时间后调用文件X.Y.Z. DLL 。在此期间没有发生新的部署。但突然之间名称匹配失败了。您是否按名称在配置中加载了一些程序集?也许你应该在字符串比较中检查IgnoreCase。
另一个想法:你是否为对象使用某种缓存?还是基于缓存的LifetimeManager?如果缓存项在一段时间后失效,则会丢失这些对象。
答案 1 :(得分:0)
我仍然不知道发生了什么,但我设法修复它。我正在使用第三方引导库来注册我的组件和映射。但是在用MEF滚动自己,并自己控制注册后,问题就消失了。我猜它是通过处理不应该有的东西来做一些时髦的事情。谢谢你的帮助。
如果有人使用http://bootstrapper.codeplex.com/使用以下声明遇到此问题:
Bootstrap.Bootstrapper
.With.Unity()
.And.AutoMapper()
.And.ServiceLocator()
.Start();
我将其替换为:
IUnityContainer container = new UnityContainer();
MEFContainer mefContainer = new MEFContainer();
mefContainer.UnityRegistry.ForEach(x => x.Register(container));
container.RegisterInstance<IMappingEngine>(Mapper.Engine);
mefContainer.AutoMapperRegistry.ForEach(x => x.CreateMap(Mapper.Configuration));
,其中
private class MEFContainer
{
[ImportMany(typeof(IUnityRegistration))]
public List<IUnityRegistration> UnityRegistry { get; set; }
[ImportMany(typeof(IMapCreator))]
public List<IMapCreator> AutoMapperRegistry { get; set; }
public MEFContainer()
{
var catalog = new DirectoryCatalog("bin");
var compositionContainer = new CompositionContainer(catalog);
compositionContainer.ComposeParts(this);
}
}
请注意,IUnityRegistration.Register()和IMapCreator.CreateMap()是在第三方代码中定义的。 MEF引用System.ComponentModel.Composition 和System.ComponentModel.Composition.Hosting。最终会重构。