Tag: autofac

autofac的Func 来解析命名服务

鉴于注册服务: builder.RegisterType().Named(“one”).As(); builder.RegisterType().Named(“two”).As(); builder.RegisterType().Named(“three”).As(); 我可以通过注入类似Func东西来检索IFoo接口的命名实现吗? public class SomeClass(Func foo) { var f = foo(“one”); Debug.Assert(f is Foo1); var g = foo(“two”); Debug.Assert(g is Foo2); var h = foo(“three”); Debug.Assert(h is Foo3); } 我知道我可以用Meta做,但我不想用它。

如何在基本的MVC5.1网站中正确注册AutoFac?

AutoFac最近已针对MVC 5.1进行了更新,但在撰写本文时,我发现缺少文档(特别是对于一个简单的示例)。 我想将依赖项注入MVC​​控制器并注册我自己的实现,例如电子邮件(实际发送与打印到输出窗口)作为基本示例。 我不知道我是否遗漏了一个很好的资源,我有点担心,因为它使用OWIN规范,实现可能与MVC5.1不同(ASP.NET身份使用OWIN并且使用了一些特殊属性正确实例化OWIN)所以需要检查我是否正确。 我有一个使用以下设置代码的工作示例 – 对于标准MVC5.1 Web应用程序,这是正确和良好的做法吗? 额外问题:我是否需要将InstancePerHttpRequest添加到RegisterControllers行? 即builder.RegisterControllers(typeof(MvcApplication).Assembly).InstancePerHttpRequest(); (注意:我在Autofac上看到GitHub上的示例,但找不到适合MVC5.1的简单示例。) public static void RegisterDependencies() { // Register MVC-related dependencies var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.RegisterModelBinders(typeof(MvcApplication).Assembly); builder.RegisterModule(); // Register e-mail service builder.RegisterType().As().InstancePerHttpRequest(); builder.RegisterModelBinderProvider(); // Set the MVC dependency resolver to use Autofac var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } 而我的控制器: public class HomeController : […]

Autofac – 注册多个装饰器

鉴于以下内容: public interface ICommandHandler { void Handle(TCommand command); } public class MoveCustomerCommand { } public class MoveCustomerCommandHandler : ICommandHandler { public void Handle(MoveCustomerCommand command) { Console.WriteLine(“MoveCustomerCommandHandler”); } } public class TransactionCommandHandlerDecorator : ICommandHandler { private readonly ICommandHandler _decorated; public TransactionCommandHandlerDecorator(ICommandHandler decorated) { _decorated = decorated; } public void Handle(TCommand command) { Console.WriteLine(“TransactionCommandHandlerDecorator – before”); _decorated.Handle(command); […]

动态菜单创建IoC

我想知道是否有人在那里知道如何创建我如何使用像AutoFac这样的东西让我动态允许dll创建自己的表单和菜单项来在运行时调用它们。 所以如果我有, Employee.dll 新的入门表格 证书表格 Supplier.dll 供应商详细信息 产品表格 在我的winform应用程序中,它会创建一个菜单,当每个单击加载相关表单时 人 新的入门 证书 供应商 供应商详情 制品 所以我可以为项目添加一个新的类库,它只是在加载时将它添加到菜单中。 希望有意义,有人可以帮助我。 干杯 艾丹

Autofac DbContext已被处理

我已经阅读过这篇文章DbContext已经处理掉并且autofac但是我仍然得到同样的错误: 由于已经处理了DbContext,因此无法完成操作。 public class EFRepository : IRepository { private EFDbContext context; public EFRepository(EFDbContext ctx) { context = ctx; } public TEntity FirstOrDefault(Expression<Func> predicate, params Expression<Func>[] includes) where TEntity : class, IContextEntity { IQueryable query = includes.Aggregate<Expression<Func>, IQueryable> (context.Set(), (current, expression) => current.Include(expression)); return query.FirstOrDefault(predicate); } } 而在Global.asax中 ContainerBuilder builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.Register(c => […]

从Autofac Builder获取所有AsClosedTypesOf注册变体

让我们假设这些类/接口: public interface ICommand { } public class SomeCommand : ICommand { } public interface ICommandHandler where T : ICommand { void Handle(T arg); } public class SomeCommandHandler : ICommandHandler { void Handle(SomeCommand arg){ /* do something */ } } public interface ICommandBus { void RegisterHandler(T t) where T : ICommandHandler; void RegisterHandlerByParam(ICommandHandler t2) where […]

运行时Autofac通用服务解析

最近,Castle通过内核提供的实现添加了对接口工厂的支持。 我想知道是否有办法在autofac中也这样做。 我已经阅读过委托工厂,但我想我可能会遗漏一些东西,而且无法让它工作。 这就是我的想法: class Message { } interface IHandle { void Handle(T message); } class Handle : IHandle { … } class Bus { .ctor (? lookup) { _lookup = lookup; } void Send(T message) { _lookup.GetHandler().Handle(message); } } var builder = new ContainerBuilder(); builder.RegisterType<Handle>().As<IHandle>(); builder.RegisterType(); var container = builder.Build(); container.Resolve().Send(new Message()); 我要做的是将容器从公共汽车中取出(因为我同意服务定位器是反模式)或任何其他实现。 如果我只是将容器提供给总线,或者创建一个包装容器的类工厂,这个问题很容易。 […]

使用Web API 2进行Autofac – 无参数构造函数错误

我想在我的Web API 2项目上设置Autofac。 我以前只用了几次。 我使用Nuget安装了Autofac和Autofac.WebApi2 。 然后在我的Startup课程中我做了这个: public partial class Startup { public void Configuration(IAppBuilder app) { // Get our http configuration var config = new HttpConfiguration(); // Register the Autofac middleware FIRST. This also adds // Autofac-injected middleware registered with the container. var container = ConfigureInversionOfControl(app, config); // Register all areas AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); // […]

如何使用Autofac注入AutoMapper?

将AutoMapper注入其他图层的正确方法是什么? 我读了这篇博文,但是这段代码导致了以下exception AutoMapper.dll中出现“AutoMapper.AutoMapperMappingException”类型的例外,但未在用户代码中处理 当尝试在服务层中映射时。 List list2 = _mapper.Map<List>(list); 我的AutoFac配置如下: public static class DependencyRegistration { public static void Config() { var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.RegisterType().As(); builder.RegisterType().As().WithParameter(“mappers”, MapperRegistry.Mappers).SingleInstance(); builder.Register((ctx, t) => ctx.Resolve()).As().As(); builder.RegisterType().As(); //… var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } }

Autofac,升级到版本4.0.0缺少ConfigurationSettingsReader

最新的文档仍然引用了ConfigurationSettingsReader类,它似乎在更新的Autofac.Configuration程序Autofac.Configuration缺失。 如何在4.0.0版本中获得此代码的等效function。 我有这个配置: … 和这段代码。 // register the application overrides. container.RegisterModule(new ConfigurationSettingsReader(“dependencies”)); 另外, 新的autofac.configuration程序集是唯一依赖于框架版本4.5.1的autofac程序集,而不是4.5