3

我收到 StructureMap ObjectFactory.TryGetInstance 的“无法解决符号错误”

但是 ObjectFactory.GetInstance 没问题。

StructureMap 版本 3。程序集包括“使用 StructureMap;” 我在 MVC 5 项目中使用它。

缺少任何其他包括?

4

4 回答 4

5

ObjectFactory.Container.TryGetInstance 更好

于 2014-05-07T17:03:18.853 回答
4

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

于 2014-12-19T14:46:39.807 回答
1

ObjectFactory.Container.GetInstance 解决了这个问题。

于 2014-05-02T13:24:29.990 回答
0

正如 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>();
于 2016-01-07T15:20:57.560 回答