我收到 StructureMap ObjectFactory.TryGetInstance 的“无法解决符号错误”
但是 ObjectFactory.GetInstance 没问题。
StructureMap 版本 3。程序集包括“使用 StructureMap;” 我在 MVC 5 项目中使用它。
缺少任何其他包括?
我收到 StructureMap ObjectFactory.TryGetInstance 的“无法解决符号错误”
但是 ObjectFactory.GetInstance 没问题。
StructureMap 版本 3。程序集包括“使用 StructureMap;” 我在 MVC 5 项目中使用它。
缺少任何其他包括?
ObjectFactory.Container.TryGetInstance 更好
ObjectFactory.Container.Try/GetInstance() 现在被替换为创建一个 Container 实例并使用其中的方法。根据我的阅读,ObjectFactory 无论如何都是 Container 的封装。
public object GetService(Type serviceType)
{
// Previous way
return serviceType.IsAbstract || serviceType.IsInterface ?
ObjectFactory.Container.TryGetInstance(serviceType) :
ObjectFactory.Container.GetInstance(serviceType);
// New way
Container container = new Container();
return serviceType.IsAbstract || serviceType.IsInterface ?
container.TryGetInstance(serviceType) :
container.GetInstance(serviceType);
}
来源: https ://groups.google.com/forum/#!topic/structuremap-users/S7nBib95zh0
ObjectFactory.Container.GetInstance 解决了这个问题。
正如 Vahid N. 的回答在讨论中可能有用:
我的版本,产生一个延迟加载的线程安全单例,但你的
Initialize
方法不是线程安全的。尝试:
public static class StructureMapObjectFactory
{
private static readonly Lazy<Container> _containerBuilder = new Lazy<Container>(() => new Container(), LazyThreadSafetyMode.ExecutionAndPublication);
public static IContainer Container
{
get { return _containerBuilder.Value; }
}
public static void Initialize<T>() where T : Registry, new()
{
Container.Configure(x =>
{
x.AddRegistry<T>();
});
}
}
以及如何使用:
DbContext dataContext = StructureMapObjectFactory.Container.TryGetInstance<DbContext>();