Tag: autofac

如何在混合Web API和MVC应用程序中使用Autofac解析Web API控制器?

嗨,我有一个MVC应用程序,我已经为我的Web API定义了一些依赖项。 public class AutofacWebApiDependenceResolver : IDependencyResolver { private readonly IComponentContext container; public AutofacWebApiDependenceResolver(IContainer container) { if (container == null) { throw new ArgumentNullException(“container”); } this.container = container; } public object GetService(Type serviceType) { if (serviceType == null) { throw new ArgumentNullException(“serviceType”); } var ret = this.container.ResolveOptional(serviceType) ; return ret; } public IEnumerable GetServices(Type serviceType) […]

Autofac – 无需传递容器即可解析运行时参数

我有一个更简单的“ServiceHelper”类,它在构造函数中接受两个参数: public ServiceHelper(ILogger log, string serviceName) (用于NOG的ILogger通用包装器,Autofac提供的很好,而serviceName是控制我需要在运行时提供的Windows服务的名称。) 我在使用Autofac在运行时传递不同服务名称时如何创建此类的新实例时遇到了麻烦。 这样的东西当然不起作用,因为我需要在运行时指定不同的服务名称: builder.RegisterType().As().WithParameter(new NamedParameter(“serviceName”, null)).InstancePerDependency(); 从我所读到的,它是一个坏习惯传递容器并手动调用Resolve(AutoFac警告的服务定位器“反模式”),或者是它? 如果我这样做那么我就可以做到 container.Resolve(new NamedParameter(“serviceName”, “some service name”)); 但是,即使到目前为止,我也不太确定如何让Autofac将容器注入到类中,它只需要注册自己的确切方式,就像这样? 然后让我的类在他们的构造函数中需要一个IContainer? (这是使用构造函数注入的C#服务) builder.RegisterType().As().InstancePerDependency(); 我也读到了委托工厂,但似乎并没有摆脱必须通过容器。 实际上我的大多数类使用ServiceHelper,只需要1或2个ServiceHelper来获取特定的服务名称,所以它不像我使用意外的serviceName参数制作数千个,这只是让我头疼一点。

使用Autofac注册通用类型

我有UnitofWork类,它实现了IUnitOfWork。 我试着用autofac注册: var builder = new ContainerBuilder(); builder .RegisterGeneric(typeof(UnitOfWork<Repository,>)) .As(typeof(IUnitOfWork)) .InstancePerDependency(); 实施是: public class UnitOfWork : IUnitOfWork where T : Repository where O : BaseEntity { } public interface IUnitOfWork : IDisposable { void SaveChanges(); } 给出“预期类型”错误 但是这个工作在另一个项目上: public class Repository : GenericRepository where T : BaseEntity { public Repository(IDbContext context) : base(context) { } […]

自定义Autofac的组件分辨率/具有通用协同/反演的问题

首先,抱歉模糊的问题标题。 我无法想出更准确的一个。 鉴于以下类型: { TCommand : ICommand } «interface» «interface» / +———–+ +———————-/—-+ | ICommand | | ICommandHandler | +———–+ +—————————+ ^ | Handle(command: TCommand) | | +—————————+ | ^ | | +————+ +——————-+ | FooCommand | | FooCommandHandler | +————+ +——————-+ ^ | +——————-+ | SpecialFooCommand | +——————-+ 我想写一个方法Dispatch接受任何命令并将其发送到适当的ICommandHandler 。 我认为使用DI容器(Autofac)可能会大大简化从命令类型到命令处理程序的映射: void Dispatch(TCommand command) […]

用AutoFac替换出厂

我习惯于创建我自己的工厂(如图所示): public class ElementFactory { public IElement Create(IHtml dom) { switch (dom.ElementType) { case “table”: return new TableElement(dom); case “div”: return new DivElement(dom); case “span”: return new SpanElement(dom); } return new PassthroughElement(dom); } } 我终于开始在我当前的项目中使用IoC容器(AutoFac)了,我想知道是否有一些使用AutoFac优雅地实现同样function的神奇方法?

.NET 4,AllowPartiallyTrustedCallers属性和SecurityCritical等安全标记

我是新的C#,我正在尝试了解.NET-4的新安全function 。 为了填写一些细节,我目前正在尝试更新AutofacContrib.Moq以使用最新的Moq。 对于.NET-3.5及以下版本,我没有遇到任何问题。 但在.NET-4中,安全限制会导致许多安全exception。 Moq有一个单独的方法GetObjectData ,它标有SecurityCritical属性。 AutofacContrib.Moq具有AllowPartiallyTrustedCallers属性集,该属性是exception的来源。 似乎不是添加SecurityRules属性为1的SecurityRules属性,而是最好删除AllowPartiallyTrustedCallers属性。 我相信这会默认使用程序集SecurityTransparent,这可能是不够的(尽管AutofacContrib.Moqunit testing通过)。 我目前的主要问题是,针对.NET-4的程序集是否应该使用AllowPartiallyTrustedCallers属性? 但是,鉴于我绝对不了解所有内容,在使用安全标记的程序集时应该考虑哪些细节? 我是否需要在其使用的地方使用安全属性明确标记我的程序集,直接或间接地标记为SecurityCritical ?

如何使用Autofac与方法连接事件?

是否可以通过接口/类(通过构造函数和属性注入)将事件连接到具有Autofac的方法而不是整个对象。 我想绑定在function级别而不是类型级别。 以编程方式我希望完成以下工作(在C#中): someType.Output += someOtherType.Input; 例如,Spring.net支持以下构造来实现: Autofac能够做到这一点以及如何做到这一点? 是否可以将xml配置用于此类任务?

配置在抽象类上定义的Autofac委托工厂

我正在研究一个C#项目。 我正在尝试摆脱具有大型switch语句的Factory类。 我想配置Autofac以便能够基于参数构造依赖关系,从而允许Autofac取代Factory。 我查看了Autofac wiki的DelegateFactories页面 ,但我无法弄清楚如何将模式应用于抽象类。 以下是一些显示情况的代码: public enum WidgetType { Sprocket, Whizbang } public class SprocketWidget : Widget { } public class WhizbangWidget : Widget { } public abstract class Widget { public delegate Widget Factory(WidgetType widgetType); } public class WidgetWrangler { public Widget Widget { get; private set; } public WidgetWrangler(IComponentContext context, WidgetType […]

针对特定类类型的Autofac扫描assembly

我已经开始使用Autofac并希望扫描一些DLL并让Autofac注册其中的一些类。 我感兴趣的类都inheritance自PluginBase类,但下面的代码似乎没有注册它们。 有人可以帮忙吗? var assemblies = AppDomain.CurrentDomain.GetAssemblies(); var builder = new ContainerBuilder(); builder.RegisterAssemblyTypes(assemblies) .Where(t => t.BaseType == typeof(PluginBase)) .AsImplementedInterfaces() .AsSelf(); var container = builder.Build(); var pluginClasses = container.Resolve<IEnumerable>(); //pluginClasses is empty!!!!

WinForm应用程序中的NHibernate和AUTOFAC

我正在寻找一个很好的教程,在WinForm应用程序中使用NHibernate配置AUTOFAC,在创建表单时注入ISession并在表单关闭时处理ISession。 我发现了很多MVC和ASP.NET示例但没有使用WinForm。 你能为我指出正确的方向吗?