gpt4 book ai didi

c# - StructureMap 2.5 和内部实现者

转载 作者:行者123 更新时间:2023-11-30 13:52:43 24 4
gpt4 key购买 nike

是否有可能使这些东西正常工作(某种方式强制 Objectfactory 创建像 Activator 这样的实例)

在下面的示例中,所有内容都放在一个组件中

public interface IUnitOfWorkFactory
{
IUnitOfWork Create();
}

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

自举:

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:  207Internal 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:\Porktal\Porktal.Core\Bootstraper.cs:line 20   at Porktal.Core.Tests.UnitOfWorkTests.Can_Start_Unit_of_Work() in D:\Porktal\Porktal.Core.Tests\UnitOfWorkTests.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)

最佳答案

您有 2 个选择。您可以将 NHUnitOfWorkFactory 公开(首选)。

或者您可以将构建内部类的代码以 lambda 的形式放入程序集中(它可以访问内部成员),并将其传递给 StructureMap:

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

与较新版本的 StructureMap 等效的是:

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

关于c# - StructureMap 2.5 和内部实现者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com