站点的初始部署工作正常。大约2-3小时后,由于无法解析依赖关系,控制器突然无法实例化(或者至少错误消息是这样告诉我的)。
我尝试过各种方法,但似乎都不能解决这个问题。有没有人知道我可以检查什么?
发布于 2012-02-01 06:24:15
我仍然不知道发生了什么,但我设法解决了它。我使用第三方bootstrapping库来注册我的组件和映射。但是在我在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。最终会重构。
发布于 2012-01-27 04:48:05
最近,我们的一个拦截器遇到了类似的情况。突然之间,它就不再工作了。我们拦截对程序集X.Y.Z.dll中定义的接口的所有调用。但过了一段时间,操作系统决定将该文件命名为X.Y.Z.DLL。在此期间,没有发生新的部署。但是突然之间,名称匹配失败了。您是否按名称在配置中加载某些程序集?也许你应该在字符串比较中检查IgnoreCase。
另一个想法是:你是否对你的对象使用了某种缓存?还是基于缓存的LifetimeManager?如果缓存项在一段时间后失效,您将丢失这些对象。
https://stackoverflow.com/questions/9024754
复制相似问题