English 中文(简体)
2. 结构2.5和内部执行器
原标题:StructureMap 2.5 and internal implementors
  • 时间:2009-10-09 09:23:48
  •  标签:

这样做是有可能的(某种方式迫使反对者制造象活动分子这样的事例)。

在以下例子中,所有物品都置于阴道上。

public interface IUnitOfWorkFactory
{
    IUnitOfWork Create();
}

internal class NHUnitOfWorkFactory : IUnitOfWorkFactory
{
    public IUnitOfWork Create()
    {
        ////  do needed stuff
    }
}

boot:

ObjectFactory.Configure(x =>
{
    x.ForRequesedType<IUnitOfWorkFactory>.TheDefaultIsConcreteType<NHUnitOfWorkFactory>();
}); 

使用:

IUnitOfWorkFactory factory = ObjectFactory.GetInstance<IUnitOfWorkFactory>();

我的结果:

Porktal.Core.Tests.UnitOfWorkTests.Can_Start_Unit_of_Work : StructureMap.StructureMapException : StructureMap Exception Code:  207
Internal exception while creating Instance  Porktal.Core.Data.NH.NHUnitOfWorkFactory, Porktal.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null  of PluginType Porktal.Core.Data.IUnitOfWorkFactory.  Check the inner exception for more details.
---- System.MethodAccessException : Porktal.Core.Data.NH.NHUnitOfWorkFactory..ctor()
Stack Trace:
   at StructureMap.Pipeline.ConfiguredInstanceBase`1.StructureMap.Pipeline.IConfiguredInstance.Build(Type pluginType, BuildSession session, InstanceBuilder builder)
   at StructureMap.Pipeline.ConfiguredInstanceBase`1.build(Type pluginType, BuildSession session)
   at StructureMap.Pipeline.Instance.createRawObject(Type pluginType, BuildSession session)
   at StructureMap.Pipeline.Instance.Build(Type pluginType, BuildSession session)
   at StructureMap.Pipeline.BuildPolicy.Build(BuildSession buildSession, Type pluginType, Instance instance)
   at StructureMap.InstanceFactory.Build(BuildSession session, Instance instance)
   at StructureMap.BuildSession.CreateInstance(Type pluginType, Instance instance)
   at StructureMap.BuildSession.b__0(Type t)
   at StructureMap.Util.Cache`2.get_Item(KEY key)
   at StructureMap.BuildSession.CreateInstance(Type pluginType)
   at StructureMap.Container.GetInstance(Type pluginType)
   at StructureMap.Container.GetInstance[T]()
   at StructureMap.ObjectFactory.GetInstance[PLUGINTYPE]()
   at Porktal.Core.Bootstraper.Bootstrap() in D:PorktalPorktal.CoreBootstraper.cs:line 20
   at Porktal.Core.Tests.UnitOfWorkTests.Can_Start_Unit_of_Work() in D:PorktalPorktal.Core.TestsUnitOfWorkTests.cs:line 11
----- Inner Stack Trace -----
   at PorktalCoreDataNHNHUnitOfWorkFactoryInstanceBuilder44203c8113d44053be045df4db28c3dc.BuildInstance(IConfiguredInstance , BuildSession )
   at StructureMap.Pipeline.ConfiguredInstanceBase`1.StructureMap.Pipeline.IConfiguredInstance.Build(Type pluginType, BuildSession session, InstanceBuilder builder)

最佳回答

你有两种选择。 您可以公布NHUnitOfWorkFactory(引文)。

或者,你可以将构成你内部阶级的法典(如果与内部成员接触的话)以“玛目”的形式出现,并将其传递给结构。

ObjectFactory.Configure(x => {
  x.ForRequestedType<IUnitOfWorkFactory>()
   .TheDefault.Is.ConstructedBy(() => new NHUnitOfWorkFactory())
});

结构Map的新版本相当于:

ObjectFactory.Configure(x => {
  x.For<IUnitOfWorkFactory>().Use(() => new NHUnitOfWorkFactory())
});
问题回答

我已经证实这一点,但是,让新胡尼特瓦夫工作基金会的大会内部在结构上看上去,可能会trick。

您使用InternalsVisible 属性,载于你的议会信息学课程。





相关问题
热门标签