Tag: autofac

MVC5 Autofac:找不到的视图

我创建了非常简单的MVC 5.0应用程序,我推送到GitHub存储库: https : //github.com/marxin/mvc-sample 。 我的动机是使用mono 3.2.3在Linux上执行app。 我想添加Autofac NuGet包(更确切地说是3.3.0),这对我来说很好。 问题是,如果我添加Autofac.Mvc5集成包,Razor将停止处理以下错误: System.InvalidOperationException The view found at ‘~/Views/Home/Index.cshtml’ was not created. Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): System.Web.Mvc. Exception stack trace: at System.Web.Mvc.BuildManagerCompiledView.Render (System.Web.Mvc.ViewContext viewContext, System.IO.TextWriter writer) [0x00000] in :0 at System.Web.Mvc.ViewResultBase.ExecuteResult (System.Web.Mvc.ControllerContext context) [0x00000] in :0 […]

Autofac使用开放式通用类解析开放式通用接口

所以我有一个接口和类: public interface IMyInterface where T : ISomeEntity {} public class MyClass : IMyInterface where T : ISomeEntity {} 我会有一些课程要求它: public class SomeClass : ISomeClass { public SomeClass (IMyInterface myInterface) {} } 我已经做了各种各样的事情来让它注册开放的通用接口和类没有运气。 我只想说: container.RegisterType(typeof(MyClass)).As(typeof(IMyInterface)); 如果我必须经历并明确地执行以下操作,那将是令人讨厌的: container.RegisterType<MyClass>().As<IMyInterface>(); 这不应该是微不足道的吗?

如何使用Xamarin和Autofac将构造函数依赖项注入ViewModel?

我有一个ViewModel,我想在其中注入另一个类。 我正在使用Visual Studio和最新版本的Xamarin。 我正在使用Autofac来注册解析依赖项。 但我是新手,我遇到了一个我无法找到解决方案的问题,即使它可能很简单。 这是我想要注入另一个类的类: public IMessagingCenterWrapper MessagingCenterWrapper; public LoginViewModel(IMessagingCenterWrapper messagingCenterWrapper){ MessagingCenterWrapper = messagingCenterWrapper; } 然后在应用程序的入口点我有一个函数初始化容器,它注册并解析依赖项 static IContainer container{ get; set; } public App () { InitializeComponent(); InitializeIOCContainer(); } void InitializeIOCContainer() { var builder = new ContainerBuilder(); builder.RegisterType(); builder.RegisterType().As(); container = builder.Build(); var wrapper = container.Resolve(); var viewModel = container.Resolve(); } 但是在登录视图中的行中构建时出错: BindingContext = […]

PostSharp AssemblyLoadException Autofac

我正在建立一个新的解决方案,我想使用最新的Autofac(3.4)和PostSharp 3.1.42。 在引用NuGet包后,我得到以下错误,我无法弄清楚发生了什么。 我从未选择过Autofac 3.3.0软件包。 packages.config: MSBuild日志: Error 3 Unhandled exception (3.1.43.0, 32 bit, CLR 4.5, Release): PostSharp.Sdk.CodeModel.AssemblyLoadException: Cannot find assembly ‘autofac, version=3.3.0.0, culture=neutral, publickeytoken=17863af14b0044da’. [Version mismatch] ============ PostSharp Assembly Loading Log =================== LOG: Finding the assembly with binding identity ‘autofac, version=3.3.0.0, culture=neutral, publickeytoken=17863af14b0044da’. LOG: Found file ‘D:\web\Project\packages\Autofac.3.4.0\lib\net40\Autofac.dll’ with identity ‘autofac, version=3.4.0.0, culture=neutral, publickeytoken=17863af14b0044da, processorarchitecture=msil’. […]

使用WAS将Autofac与WCF服务一起使用

我喜欢通过在配置文件中设置serviceActivations来托管没有.svc文件的服务的WCF 4.0function。 它使用默认服务工厂工作得很好但现在我正在尝试使用AutofaServiceHostFactory执行相同操作,因此我的依赖项将被正确注入。 在我尝试的所有场景中,当我尝试访问服务时仍然遇到此错误: 为WCF配置的服务“WCFAutofacWiring.MyService”未向Autofac容器注册 。 我在一个空的asp.net网站上托管我的服务。 这是我做的: Web.config: 然后,我在app_code文件夹中放置一个文件来注册我的依赖关系,如Autofac文档( Autofac WcfIntegration )中所述,我向调试器确认在服务启动时调用了代码: public static class AppStart { public static void AppInitialize() { AutofacHostFactory.Container = new AutofacBootstrapper().Configure(); } } 最后,这是我的注册: public class AutofacBootstrapper { public IContainer Configure() { var builder = new ContainerBuilder(); // register types builder.Register(x => new MyLanguageProvider(“en-US”)); builder.RegisterType(); return builder.Build(); } } […]

ASP.net Session_Start方法中的dependency injection

我正在学习dependency injection并首次使用autofac。 我在几个autofac示例(见下文)中提到了构建容器,并从我的application_start调用 public class ContainerConfig { public static void RegisterContainer() { //Create a new ContainerBuilder var builder = new ContainerBuilder(); // Register all the controllers using the assembly object builder.RegisterControllers(Assembly.GetExecutingAssembly()); //Registering default convention — IExample and Example builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) .Where(t => t.Name.Single(i => i.Name == “I” + t.Name)) .AsImplementedInterfaces(); //Build the container var container = […]

为参数的具体名称注册字符串值

我正在使用Autofac,我有几个类要求参数类型字符串和名称lang。 有没有办法将字符串值注册到名为“lang”的所有参数,所以它会自动解决? 我不想编辑任何构造函数,因为它不是我的代码(我知道接受例如CultureInfo会使注册变得容易..) 导致语法简短的东西,比如builder.Register(lang =>“en-US”)。As()。Named(“lang”) 会是理想的。 谢谢。

Autofac子依赖链注册

题 如何构造AutoFac ContainerBuilder,以便正确解析我的子依赖关系(假设接口的多个具体实现)? 默认注册/解析将不起作用,因为我有多个子依赖项的具体实现,并且子依赖项解析依赖于主对象的分辨率。 在所有情况下,我希望使用构造函数注入。 脚本 例如,假设我需要打印收据,因此我创建了一个名为IReceipt的接口,其中一个方法称为PrintReceipt()。 但我需要打印3种收据 标准收据 礼品收据 电子邮件收据 所有收据类型都有不同的格式,电子邮件收据根本不打印,而是通过电子邮件发送。 所以我希望我的IReceipt能够依赖格式化器和处理器。 假设我使用Process()方法创建IProcessor,它可以是打印机处理器,也可以是电子邮件处理器(打印机处理器负责打印机通信,电子邮件处理器负责与SMTP服务器通信) 。 此外,我创建了一个IFormatter,它可以将输入提供给处理器对象,格式化为标准收据,或礼品收据,甚至是电子邮件收据的HTML。 因此,关于IReciept的任何具体实现的构造函数现在需要两个依赖项–IFormatter和IProcessor。 现在,根据我需要决定的根构成,我是否正在解决用于标准收据,礼品收据或电子邮件收据的IReceipt。 我想调用容器Resolve()方法传递必要的参数,以便它解析正确的IReceipt。 此外,我希望注册ContainerBuilder知道,如果我尝试解决IReceipt标准收据的具体实现,它需要使用正确的标准收据IFormatter解决子依赖关系,并更正标准收据IProcessor。 对于礼品收据方案和电子邮件收据方案也是如此。 概括 所以 – 在所有这些 – 我的问题是 – 我如何构造ContainerBuilder,以便在设计时定义子依赖,并且单次调用Resolve()将正确识别所需的具体实现? 我不是在寻求与打印机对话或发布HTML的解决方案。 此问题严格适用于Autofac注册和解决方法。 在不同的客户端,我使用CastleWindsor使用了这个确切的策略,但我当前的客户端使用的是Autofac。

如何将Autofac容器用作抽象工厂?

我想修改我当前的LetterFactory实现并通过调用容器来移除对Activator.CreateInstance的调用,以解析使用构造函数注入完全初始化的当前Letter。 我已经在这里和这里阅读了文档,甚至在撰写这篇文章时也发表了这篇文章,但似乎没有任何内容。 笔记: 1)IDocumentServicesCore是一个聚合。 2)所有字母都用LetterTypeAttribute(数百个)装饰 3)此LetterFactory本身已在容器中注册。 public class LetterFactory : ILetterFactory { private readonly IDocumentServicesCore _documentServicesCore; public LetterFactory(IDocumentServicesCore documentServicesCore) { _documentServicesCore = documentServicesCore; } public LetterBase Create(int letterId) { if (letterId <= 0) { throw new ArgumentOutOfRangeException(nameof(letterId)); } List types = typeof(LetterBase).Assembly.GetTypes() .Where(t => !t.IsAbstract && t.IsSubclassOf(typeof(LetterBase))) .ToList(); LetterBase letter = null; foreach(Type type in […]

我可以使用Moq集成在UnitTests中访问Autofac的全部function吗?

我的项目(建立在Orchard之上,虽然我认为不相关)使用Autofac 。 我正在编写unit testing,我希望使用Moq来删除任何依赖项,并且我正在使用Autofac / Moq集成来实现这一点。 这适用于作为构造函数参数传递的任何简单依赖项。 (Autofac文档提供了有关如何实现此目的的详细信息)。 但是因为我没有使用containerBuilder,所以我看不到如何使用很多Autofac的function – lamda注册 , 注册generics ,标记要自动连接的属性。 等等 我错了,它可以以某种方式访问​​? 由于场景的一些固有约束,这些东西是不可用的吗? 是否有可能,尚未在此Autofac / Moq集成中实现(尚未)? 有好的工作吗?