Tag: structuremap

按类型名称从StructureMap获取实例

有没有办法通过类型的字符串名称从StructureMap ObjectFactory请求实例? 例如,做这样的事情会很好: var thing = ObjectFactory.GetInstance(“Thing”); 此处的用例是一种消息传递方案,其中消息非常通用,仅包含任务的名称。 处理程序接收消息,从消息中获取任务名称,并从配置数据库中检索关联任务运行器的类型名称。 StructureMap扫描目录中的所有程序集,其中一个(可能)包含从配置数据库返回的类型,然后需要对其进行实例化。 另一种可能性是通过执行以下操作来获取Type实例: var type = Type.GetType(“Thing”); 但问题是可能会或可能/不会在AppDomain中加载程序集,因此并不总是可以进行reflection调用。

StructureMap:创建为瞬态(每个请求)不起作用

我正试图解决一个IoC问题,起初看起来很容易,但结果却是一个痛苦的屁股:-P 我有一个重量级的主类,必须初始化一次,所以它被标记为Singleton。 但是,这个类使用的子类必须为每个请求创建一次,因此它被标记为Transient: public class MyRegistry : Registry { public MyRegistry() { For() .Singleton() .Use(ctx => new MainClass(() => ctx.GetInstance())); For() .Transient() .Use(ctx => CreateNewInstanceOfSubClass()); } private ISubClass CreateNewInstanceOfSubClass() { return new SubClass(); } } public interface ISubClass { } public class SubClass : ISubClass { } public interface IMainClass { } public class MainClass […]

特定于环境的StructureMap配置?

回到我使用StructureMap 2.6时,我能够通过将PullConfigurationFromAppConfig设置为TRUE来从配置中提取配置数据。 这有助于我根据构建配置覆盖实例。 在最新版本中,这似乎已不复存在。 如何通过配置文件指定自定义实例,特别是web.config (我目前正在根据构建配置进行转换)。 这可能吗? 还有另一个支持这个的IoC框架吗? 谢谢。

在structure-map 3中为DecorateAllWith()方法定义filter

我使用以下语句来装饰我的所有ICommandHandlers与Decorator1 : ObjectFactory.Configure(x => { x.For(typeof(ICommandHandler)).DecorateAllWith(typeof(Decorator1)); }); 但是因为Decorator1实现了ICommandHandlers ,所以Decorator1类也会自行修饰。 所以,问题是当我注册所有ICommandHandler时, Decorator1无意中注册。 我怎样才能过滤DecorateWithAll()以装饰除Decorator1之外的所有ICommandHandler Decorator1 ?

单个应用程序消耗多个IoC注册表并存在冲突

我有一个应用程序通过两个单独的UnitOfWork类与单独的数据库进行通信。 我正在使用StructureMap来构建我的类。 单独地,每个构建和运行正确。 但是,一旦我在“ Web应用程序 ”中使用两个容器注册表,我就会遇到冲突。 两个注册管理机构都从它们的通用框架引用相同的DbContext (基础)类。 但是,每个注册表都有自己的具体DbContext类(inheritance自DbContext )。 问题是… 我消耗两个注册表的那一刻,最后是“胜利”……并且应用了错误的CONCRETE Dbcontext类(进入第一个注册表)。 DbContext多个实例应用于Repository引用。 问:如何确保在我的注册表中应用正确的CONCRETE DbContext? 问:如何确保在我的注册表中单独安装DbContext? 我尝试了各种方法但没有成功……感谢您的帮助。 例如… REGISTERY’ONE’包含: For().Use(); For().Use(); For(typeof(ICompositeRepository)).Use(typeof(DbRepository)).Ctor().Is(); For(typeof(IRepository)).Use(typeof(DbRepository)).Ctor().Is(); 注册’两个’包含: For().Use(); For().Use(); For(typeof(ICompositeRepository)).Use(typeof(DbRepository)).Ctor().Is(); For(typeof(IRepository)).Use(typeof(DbRepository)).Ctor().Is();

如何从Asp.Net MVC 5依赖性解析器获取Structuremap IContainer实例

我使用Structuremap作为我的依赖关系解析器。 我试图在我的Global.asax.cs文件上实现Container Per Request Pattern。 public IContainer Container { get { return (IContainer)HttpContext.Current.Items[“_Container”]; } set { HttpContext.Current.Items[“_Container”] = value; } } public void Application_BeginRequest() { Container = ObjectFactory.Container.GetNestedContainer(); } 由于在将来的Structuremap版本中不支持ObjectFactory,我希望从DependencyResolver访问容器。 怎么可能? 提前致谢。 Noufal

结构图Web Api 2帐户控制器和个人帐户

我非常喜欢IOC和web-api 2,但是我已经使用了StructureMap来处理web-api中我自己的控制器2.我没有管理的是使用个人帐户在AccountController上使用StructureMap。 我使用AccountController开箱即用,到目前为止我所管理的是: 在Ioc.cs中我添加了以下内容(由于错误) x.For<IUserStore>().Use<UserStore>(); x.For().Use(() => new ApplicationDbContext()); x.For<ISecureDataFormat() .Use<SecureDataFormat>(); 但是现在我遇到了这个错误: “没有注册默认实例,无法自动确定类型IDataSerializer ” 我真的不知道该怎么做。 我试图找到IDataSerializer的详细实例,但没有运气。 顺便说一句……我已经安装了Nuget包“Structuremap.webapi2”

在结构图3中,HybridHttpOrThreadLocalScoped的等价物是什么?

使用structuremap 2.6.4.1,我的容器配置如下: existingContainer.Configure(expression => { expression.For() .HybridHttpOrThreadLocalScoped() .Use(container => { var store = container.GetInstance(); return store.OpenSession(); }); } 结构图3中不存在HybridHttpOrThreadLocalScoped ,所以我的问题是,structuremap 3中的等效配置是什么?

如何确定StructureMap是否多次加载了相同的注册表?

我们正在诊断一个似乎与StructureMap和Registry有关的问题。 我们的大型应用程序正在加载注册表,但正在经历一些有趣的副作用。 在没有详细介绍所有细节的情况下,我们通过两次向StructureMap添加相同的注册表来查看可以重现的问题。 我们的假设是我们的应用程序也是这样做的,可能在扫描中添加一个实例,在显式注册中添加第二个实例。 如何确定StructureMap是否已加载此注册表的多个/重复实例?

结构图 – 如何在运行时获取命名实例并传递参数?

我可以像这样在structmap中添加一个命名实例: For().Add().Named(“FooOne”); 然后我可以得到: ObjectFactory.GetNamedInstance(“FooOne”); 我可以通过这样的注册在运行时传递参数: For().Add().Ctor(“someParam”); 并获得这样的实例: ObjectFactory.With(“someParam”).EqualTo(“blah”).GetInstance(); 一切都很好。 但我希望有一个命名实例并传递一个参数。 所以我这样注册: For().Add().Named(“FooOne”).Ctor(“someParam”); 但我无法弄清楚获取命名实例的语法并在运行时传递参数? 我正在尝试做类似的事情: ObjectFactory.With(“someParam”).EqualTo(“blah”).GetNamedInstance(“FooOne”); 但是在添加参数后,structuremap没有为我提供GetNamedInstance的选项。 我哪里错了? 替代方法建议也会很好。 基本上我要做的是为枚举的每个元素注册一个具体的类型,并使用枚举项来命名它并按名称检索它。 但我需要能够在运行时将参数传递给构造函数。 提前致谢。