Tag: structuremap

StructureMap CacheBy InstanceScope.HttpSession不起作用

这是我的StructureMap引导: ObjectFactory.Initialize(factory => { //Business Conversation is per session factory.ForRequestedType(). TheDefaultIsConcreteType(). CacheBy(InstanceScope.HttpSession); //Session Factory is life time factory.ForRequestedType(). TheDefaultIsConcreteType(). CacheBy(InstanceScope.Singleton); }); var conversation = ObjectFactory.GetInstance(); 当我将对话设置为使用.CacheBy(InstanceScope.HttpSession)时,我找不到对象引用,但是如果我不使用CacheBy它可以正常工作。 这需要进入会话,我不确定为什么这不起作用。 我做错了什么或者这似乎是StructureMap中的错误?

如何注册所有类型的接口并统一获取它们的实例?

Unity如何获取接口的所有实例然后访问它们? 代码片段取自此处: 失败跟踪器 在StrcutureMap中,可以从程序集中注册所有类型的接口,然后访问它们,如下所示: public class TaskRegistry : Registry { public TaskRegistry() { Scan(scan => { scan.AssembliesFromApplicationBaseDirectory( a => a.FullName.StartsWith(“FailTracker”)); scan.AddAllTypesOf(); scan.AddAllTypesOf(); scan.AddAllTypesOf(); scan.AddAllTypesOf(); scan.AddAllTypesOf(); }); } } ObjectFactory.Configure(cfg => { cfg.AddRegistry(new TaskRegistry()); }); 然后访问实现这些接口的所有类型,如: using (var container = ObjectFactory.Container.GetNestedContainer()) { foreach (var task in container.GetAllInstances()) { task.Execute(); } foreach (var task in container.GetAllInstances()) { […]

使用结构图dependency injection时,“没有注册IUserTokenProvider”

我有一个MVC 5项目,该项目已被修改为使用int作为身份的主键,如本指南所示 然后我按照本指南中的说明启用了电子邮件确认 一切都按预期工作正常。 然后我安装了structuremap.mvc5用于dependency injection,并添加了修改后的DefaultRegistry.cs public DefaultRegistry() { Scan( scan => { scan.TheCallingAssembly(); scan.WithDefaultConventions(); scan.AssemblyContainingType(typeof(MyProject.Data.MyDbContext)); scan.With(new ControllerConvention()); }); //For().Use(); For<IUserStore>().Use().LifecycleIs(); For().Use(() => HttpContext.Current.GetOwinContext().Authentication); } 该项目构建正常但在尝试在站点上注册新用户时,发送电子邮件确认现在抛出exceptionSystem.NotSupportedException:在调用UserManager.GenerateEmailConfirmationTokenAsync(userID)时没有注册IUserTokenProvider。 private async Task SendEmailConfirmationTokenAsync(int userID, string subject) { string code = await UserManager.GenerateEmailConfirmationTokenAsync(userID); var callbackUrl = Url.Action(“ConfirmEmail”, “Account”, new { userId = userID, code = code }, protocol: Request.Url.Scheme); […]

DI / IoC容器性能基准比较?

我在这里找到了一些用于测试几个顶级.NET DI / IoC容器性能的2008年基准测试结果。 但我无法找到任何更新的结果。 是否有任何基准测试可以比较一些大的IoC容器(StructureMap,Unity,Ninject,Autofac,Castle Windsor等)?

使用Ninject(或其他一些容器)如何找出请求服务的类型?

假设我有一个服务接口: public interface IFooService { void DoSomething(); } 并且该服务的具体实现是通用的: public class FooService : IFooService { public virtual void DoSomething() { } } 我还有一些需要IFooService实例的其他类: public class Bar { private IFooService _fooService; public Bar(IFooService fooService) { this._fooService = fooService; } } 我需要连接我的IoC容器,这样当创建Bar时,它会传递一个FooService 的构造函数参数。 还有很多其他课程就像Bar一样。 每个人都可能需要传递给他们的FooService 实例,其中TRequestingClass是需要IFooService实例的类的类型。 我不需要向IFooService的消费者公开这个怪癖。 他们应该关心的是他们可以调用他们传递的IFooService的方法。 他们不应该知道他们传递的IFooService的具体实现需要任何特殊的构造。 FooService 的一个可接受的替代方案是一个非generics类,它的构造函数中包含一个字符串参数,该类包含要为其创建的类的名称。 即: public class FooService : IFooService […]

IoC,Dll参考和汇编扫描

虽然这个问题与StructureMap有关,但我的一般问题是: 在代码中使用IoC容器连接组件时(而不是通过xml进行配置),您通常需要对所有程序集进行显式项目/构建引用吗? 为什么单独的组件? 因为: “与其具体实现相关的独立程序集中的抽象类是实现这种分离的好方法。” – 框架设计指南第91页 例: 假设我有PersonBase.dll和Bob.dll Bobinheritance自抽象类PersonBase 。 它们都在Person命名空间中。 但在不同的集会中 。 我正在为PersonBase编程,而不是Bob 。 回到我的主要代码中,我需要一个人。 StructureMap可以扫描assembly体。 好的,我会问一下StructureMap! 现在,在我的主要代码中,我当然只是指PersonBase ,而不是Bob 。 我实际上不希望我的代码知道鲍勃的 任何事情 。 没有项目参考,没有nuthin。 这就是重点。 所以我想说: //Reference: PersonBase.dll (only) using Person; … //this is as much as we’ll ever be specific about Bob: Scan( x=> { x.Assembly(“Bob.dll”); } //Ok, I should now have […]

WebActivator.PreApplicationStartMethod不起作用

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.App_Start.StructureMapMvc), “Start”)] namespace MyApp.App_Start { public static class StructureMapMvc { public static void Start() { var container = IoC.Initialize(); DependencyResolver.SetResolver(new SmDependencyResolver(container)); } } } 这是我的代码应该在global.asax中的Application_start之前运行。 我正在将我的web项目从mvc 3升级到mvc 4.所以,在那个过程中,我在命名空间中犯了一个错误。 这在我更正我的命名空间之前有效。 它现在不再有用了。 我重置了iis / flushed dns / rebuilt solution /删除了C:\ Windows \ Microsoft.NET \ Framework64 \ versionxxxxxx … \ Temporary ASP.NET Files \ root中的临时.net文件。 没有任何效果。 我错过了什么吗? […]

操作可能会破坏StructureMap中的运行时的稳定性

我在我的本地计算机上的一个ASP.NET 4.5 MVC应用程序中收到此错误。 使用ASP.NET 4.5设置其他应用程序并使用StructureMap可以正常工作。 任何帮助/解决方案都将受到高度赞赏。 导致这种情况的代码行是: using StructureMap; using StructureMap.Graph; namespace Management.Web.DependencyResolution { public static class IoC { public static IContainer Initialize() { ObjectFactory.Initialize(x => { x.Scan(scan => { scan.TheCallingAssembly(); scan.WithDefaultConventions(); scan.Assembly(“Management.Core”); scan.Assembly(“Management.DAL”); scan.Assembly(“Management.BusinessServices”); scan.Assembly(“Management.Infrastructure”); }); x.For().Use(); }); return ObjectFactory.Container; } } }

如何使用StructureMap通过代码定义默认构造函数?

我无法弄清楚如何通过代码为StructureMap(版本2.5)中的类型定义默认构造函数(当它存在重载时)。 我想获得一个服务的实例,容器必须将Linq2Sql数据上下文实例注入其中。 我用’bootstrapper’方法写了这个: ForRequestedType().TheDefault.Is.OfConcreteType(); 当我运行我的应用程序时,我收到此错误: StructureMapexception代码:202 没有为PluginFamily定义默认实例MyNamespace.Data.SqlRepository.MyDataContext,MyNamespace.Data,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null 如果我注释掉所有我不需要的Linq2Sql生成的构造函数,它可以正常工作。 更新:哦,我忘了说我不会使用[StructureMap.DefaultConstructor]属性。

StructureMap使用Scan自动注册generics类型

我有一个界面: IRepository where T : IEntity 我正在使用一些虚假的存储库实现来破坏我的UI,只返回任何旧数据。 它们看起来像这样: public class FakeClientRepository : IRepository 目前我这样做: ForRequestedType<IRepository>() .TheDefaultIsConcreteType(); 但是对于我所有的IEntities都有很多次。 是否可以使用Scan自动注册我的所有虚假存储库以用于其各自的IRepository? 编辑:这是我得到的,但我得到错误说请求的类型没有注册:( Scan(x => { x.TheCallingAssembly(); x.IncludeNamespaceContainingType(); x.AddAllTypesOf(typeof(IRepository)); x.WithDefaultConventions(); }); 谢谢 安德鲁