Tag: autofac

更新Autofac后出现奇怪的exception

我之前有一个MVC4应用程序,我已经更新了Autofac版本,每件事都运行正常,现在我有这个奇怪的例外。 请帮忙!? Method not found: ‘Autofac.Builder.IRegistrationBuilder`3 Autofac.Builder.IRegistrationBuilder`3.InstancePerMatchingLifetimeScope(System.Object)’. Line 22: var builder = new ContainerBuilder(); Line 23: builder.RegisterFilterProvider(); Line 24: builder.Register(x => new AuthorizationService()).As().InstancePerHttpRequest(); Line 25: builder.Register(x => new HeaderRepository()).As().InstancePerHttpRequest(); Line 26: builder.Register(x => new PageBuilder()).As().InstancePerHttpRequest(); 堆栈跟踪: [MissingMethodException: Method not found: ‘Autofac.Builder.IRegistrationBuilder`3 Autofac.Builder.IRegistrationBuilder`3.InstancePerMatchingLifetimeScope(System.Object)’.] Autofac.Integration.Mvc.RegistrationExtensions.InstancePerHttpRequest(IRegistrationBuilder`3 registration) +0 Application.UI.Web.Services.HttpDependencyInjectionResolver.RegisterDependencies() in c:\Users\user\Documents\Visual Studio 11\Projects\MyProject\Application.UI.Web\Services\HttpDependencyInjectionResolver.cs:24 Application.UI.Web.MvcApplication.Application_Start() in c:\Users\user\Documents\Visual Studio 11\Projects\MyProject\Application.UI.Web\Global.asax.cs:42 […]

Autofac:使用in和out类型参数解析变体类型

这个问题是我之前提出的问题的后续问题: Autofac:隐藏一个复合背后的多个逆变实现 。 我试图找到我们可以用Autofac的协方差和逆变支持做些什么的边界。 我注意到Autofac的ContravariantRegistrationSource仅支持具有使用in关键字标记的单个generics参数的通用接口。 这似乎限制了这个function的实用性,我想知道Autofac是否有其他方法来扩展协方差和逆变的支持。 我必须承认,由于我正在使用的真实应用程序设计,我不是在问这个问题。 为了教育,我故意试图找到Autofac的限制。 请考虑以下界面: public interface IConverter { TOut Convert(TIn value); } 以下实施: public class ObjectToStringConverter : IConverter { string IConverter.Convert(object value) { return value.ToString(); } } 以下注册: var builder = new ContainerBuilder(); builder.RegisterSource(new ContravariantRegistrationSource()); builder.RegisterType() .As<IConverter>(); var container = builder.Build(); 通过这种设计和配置,我希望能够做到这一点: // This call succeeds because IConverter is // […]

Autofac – 带有OWIN的SignalR。 获取对ContainerBuilder的引用

我有一个使用Autofac的现有MVC 4应用程序,我有其他具有autofac模块的程序集。如果没有SignalR / autofac集成,我的应用程序就IOC而言是完美的。 我添加了SignalR集线器,我试图通过构造函数注入依赖项。 我已经按照文档并实现了代码示例。 http://autofac.readthedocs.org/en/latest/integration/signalr.html 这导致以下课程: public class SignalRConfig { public void Configuration(IAppBuilder app) { var builder = new ContainerBuilder(); var config = new HubConfiguration(); Assembly thisAssembly = typeof(SignalRConfig).Assembly; builder.RegisterHubs(thisAssembly); var container = builder.Build(); config.Resolver = new AutofacDependencyResolver(container); app.UseAutofacMiddleware(container); app.MapSignalR(“/signalr”, config); } } 这与添加到我的AssemblyInfo.cs的这一行联系起来 [assembly: OwinStartup(typeof(SignalRConfig))] 但它不能在运行时工作,因为我的集线器没有无参数构造函数,它无法解决依赖关系。 我的假设是我正在创建一个新的ContainerBuilder(根据文档)并且该实例没有注册任何内容。 我实际上想要对我知道所有已注册类型的模块传递的ContainerBuilder的引用。 我只是不知道该怎么做。 现有的IOC代码从global.asax上的application_start运行,SignalRConfig同时运行。 我不想把ContainerBuilder放在单件中,因为它感觉很脏,但我找不到任何其他解决方案。 这是我的nuget包配置的一部分,显示了版本号等

使用Autofac进行Session-per-HttpRequest。 当不通过DependencyResolver访问ISession时,NHProf显示“多会话”警告

我已经使用Autofac成功实现了Session-per-HttpRequest。 我对我的实现不满意,因为我正在通过DependencyResolver而不依赖于AutoFac提供的参数。 如果我依赖AutoFac提供的ISession参数,那么我会收到NHProf的警告,表明正在使用多个Sessions。 如果我通过DependencyResolver ,NHProf的警告会消失,但使用方法对我来说不正确。 我遵循了此处概述的Autofac + MVC4.0指南: https : //code.google.com/p/autofac/wiki/MvcIntegration 我也使用本指南作为参考。 它表明应该可以接受ISession作为构造函数参数: http : //slynetblog.blogspot.com/2011/04/lightweight-nhibernate-and-aspnet-mvc.html 以下是我构建Autofac容器的方法: public class AutofacRegistrations { public static void RegisterAndSetResolver() { var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterControllers(Assembly.GetExecutingAssembly()); // Only generate one SessionFactory ever because it is expensive. containerBuilder.Register(x => new NHibernateConfiguration().Configure().BuildSessionFactory()).SingleInstance(); // Everything else wants an instance of Session per […]

将可选参数传递给autofac

我正在尝试使用Autofac并注册下面的类,它接收一个参数作为可选参数(或者更确切地说是null)。 我的课程是: class BaseSpanRecord : ISpanRecord { public BaseSpanRecord(RecordType recordType, List properties) { RecordType = recordType; Properties = properties; } } 这里RecordType是一个枚举,而SpanRecordAttribute是一个只有我不想创建任何接口的属性的类。 在构造函数中, RecordType和Properties是接口ISpanRecord的两个公共属性。这个类可以通过以下方式在程序的不同位置实例化: ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, null); 要么 ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, recordAttributeList); 我应该如何尝试在Autofac容器中注册它,以便它可以处理上述两种情况? 或者我应该改变BaseSpanRecord类的编写方式以使其注册更容易?

ASP.NET Autofac Singleton运行两次构造函数注入

我不确定我的期望是否错误。 我使用的是ASP.NET MVC(非核心)和Autofac。 我有一个图像出现在我的网站的每个页面上,我已经创建了一个服务来返回一个像这样的随机图像名称 接口 public interface IBreadCrumbImage { string GetImage(); } CLASS(为简洁起见) public class BreadCrumbImage : IBreadCrumbImage { public string GetImage() { return ImageUrl; } } GLOBAL.ASAX.CS(Autofac注册) protected void Application_Start() { var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.RegisterType().As().SingleInstance(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } CONTROLLER public class HomeController : Controller { private IBreadCrumbImage […]

Autofac解析通用控制器

我有一个通用的主数据服务。 示例: IMasterDataService 我试图以类似MasterDataController方式为此构建一个Api控制器。 我想使用autofac解析控制器,但我找不到相同的文档。 当我尝试时,我收到错误消息,因为无法解析该类型。 我正在为服务注册像builder.RegisterGeneric,但是控制器我没有得到实例,我想知道这是否可行。

如何在Autofac中为开放式通用注册注册一个开放的通用装饰器?

我有一个autofac处理程序的开放式通用注册,看起来像这样。 builder.RegisterAssemblyTypes(assemblies) .AsClosedTypesOf(typeof (ICommandHandler)) .AsImplementedInterfaces(); 这工作正常,并注册所有我的处理程序,用于封闭类型。 我现在想为所有处理程序注册一个通用装饰器,例如a LoggingCommandHandlerDecorator 从autofac文档来看,您需要为实现命名,因此装饰器可以是默认的ICommandHandler。 在注册开放式generics时,我不确定这是如何工作的。 我试过在开放注册中添加一个名字。 builder.RegisterAssemblyTypes(assemblies) .AsClosedTypesOf(typeof (ICommandHandler)) .Named(“commandHandler”, typeof (ICommandHandler)) .AsImplementedInterfaces(); 并注册装饰,但没有喜悦。 builder.RegisterGenericDecorator(typeof (LoggingCommandHandlerDecorator), typeof (ICommandHandler), fromKey: “commandHandler”); 任何帮助赞赏。

动作方法参数的Autofacdependency injection(ASP MVC3)

我有以下设置 public interface IObject { string Name { get; set;} } public class ConcreteObject : IObject { public string Name { get; set; } } public ActionResult Index(IObject myObject) { return View(); } 我有一个实现IObject的具体类,我使用dependency injection将这个具体类绑定到接口。 使用Autofac,我也有以下设置 var builder = new ContainerBuilder(); builder.RegisterModule(new AutofacWebTypesModule()); builder.RegisterSource(new ViewRegistrationSource()); builder.RegisterFilterProvider(); builder.RegisterControllers(Assembly.GetExecutingAssembly()).InjectActionInvoker().PropertiesAutowired(); builder.RegisterModelBinders(Assembly.GetExecutingAssembly()); builder.RegisterModelBinderProvider(); builder.RegisterType().As().WithParameter(“injectActionMethodParameters”, true); builder.RegisterType().As().InstancePerHttpRequest(); var container = […]

确定解析实例的依赖关系 – IoC(autofac)

有没有办法确定哪个调用者/依赖项正在解析它所依赖的实例? 这就是我的想法 public class A { public A() { Console.Write(“I am being resolved by {0}”); } } public class B { public B(A a) { //Should print: A being resolved by B } } public class C { public C(A a) { //Should print: A being resolved by C } } 我猜测在多个依赖项之间共享的单个实例可能有点棘手,但我特意寻找每个依赖项解析的实例,因此在上面的示例中将有两个B实例。 FWIW,我的IoC容器是Autofac,它在MVC Web应用程序的上下文中运行