autofac

定义构造函数签名的接口?

筅森魡賤 提交于 2020-02-26 16:08:29
这是我第一次碰到这个问题,这很奇怪,但是: 如何在C#接口中定义构造函数? 编辑 有些人想要一个例子(这是一个空闲时间项目,所以是的,这是一个游戏) IDrawable +更新 +绘制 为了能够更新(检查屏幕边缘等)并绘制自身,它将始终需要 GraphicsDeviceManager 。 所以我想确保对象有引用它。 这将属于构造函数。 现在我写下来了,我认为我在这里实现的是 IObservable , GraphicsDeviceManager 应该使用 IDrawable ......似乎要么我没有得到XNA框架,要么框架没有考虑得很好。 编辑 关于我在接口上下文中对构造函数的定义似乎有些混乱。 实际上不能实例化接口,因此不需要构造函数。 我想要定义的是构造函数的签名。 正如接口可以定义某个方法的签名,接口可以定义构造函数的签名。 #1楼 如果可以在接口中定义构造函数,那将非常有用。 鉴于接口是必须以指定方式使用的合同。 对于某些场景,以下方法可能是一种可行的替代方法: public interface IFoo { /// <summary> /// Initialize foo. /// </summary> /// <remarks> /// Classes that implement this interface must invoke this method from

给微软的依赖注入框架写一些扩展方法

邮差的信 提交于 2020-02-26 13:19:13
原文: 给微软的依赖注入框架写一些扩展方法 给微软的依赖注入框架写一些扩展方法 Intro # 现在在项目里大多都是直接使用微软的依赖注入框架,而微软的注入方式比较简单,不如 AutoFac 使用起来灵活,于是想给微软的依赖注入增加一些扩展,使得可以像AutoFac 一样比较灵活的注册服务 Extensions # RegisterTypeAsImplementedInterface # 将类型注册为其实现的接口,比如 pubic class UserService:IUserService,IUserRepository{} , 注册 UserService 为 IUserService 和 IUserRepository 等效于: Copyservices.AddSingleton<IUserService, UserService>(); services.AddSingleton<IUserRepository, UserService>(); 实现代码: Copy/// <summary> /// RegisterTypeAsImplementedInterfaces /// </summary> /// <param name="services">services</param> /// <param name="type">type</param> ///

给微软的依赖注入框架写一些扩展方法

泄露秘密 提交于 2020-02-25 19:19:31
给微软的依赖注入框架写一些扩展方法 Intro 现在在项目里大多都是直接使用微软的依赖注入框架,而微软的注入方式比较简单,不如 AutoFac 使用起来灵活,于是想给微软的依赖注入增加一些扩展,使得可以像AutoFac 一样比较灵活的注册服务 Extensions RegisterTypeAsImplementedInterface 将类型注册为其实现的接口,比如 pubic class UserService:IUserService,IUserRepository{} , 注册 UserService 为 IUserService 和 IUserRepository 等效于: services.AddSingleton<IUserService, UserService>(); services.AddSingleton<IUserRepository, UserService>(); 实现代码: /// <summary> /// RegisterTypeAsImplementedInterfaces /// </summary> /// <param name="services">services</param> /// <param name="type">type</param> /// <param name="serviceLifetime">service

How to register typed httpClient service with autofac?

蹲街弑〆低调 提交于 2020-02-25 04:49:46
问题 I'm creating MVC web application which calls an api using .net core 2.2 using separate HttpClient s to call each controller (same api). Ex: For user controller actions : UserService (httpclient) For post controller actions : PostService (httpclient) In startup.cs I use DI as: services.AddHttpClient<IUserService, UserService>(); services.AddHttpClient<IPostService, PostService>(); In my handler : public class CommandHandler : IRequestHandler<Command, BaseResponse> { private readonly

How to register typed httpClient service with autofac?

梦想与她 提交于 2020-02-25 04:49:10
问题 I'm creating MVC web application which calls an api using .net core 2.2 using separate HttpClient s to call each controller (same api). Ex: For user controller actions : UserService (httpclient) For post controller actions : PostService (httpclient) In startup.cs I use DI as: services.AddHttpClient<IUserService, UserService>(); services.AddHttpClient<IPostService, PostService>(); In my handler : public class CommandHandler : IRequestHandler<Command, BaseResponse> { private readonly

Ioc容器Autofac系列(1)-- 初窥

爷,独闯天下 提交于 2020-02-23 14:42:35
前言 第一次接触Autofac是因为CMS系统-- Orchard ,后来在一个开源爬虫系统-- NCrawler 中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器。那么,Ioc容器是用来做什么的?用了有什么好处?我相信如果不明白这两点就很难敞开心扉接受Ioc容器。 传统解耦设计的弊端 为方便描述,举个日志的栗子。我简化实现,一个 Log 类,一个 SaveLog 方法。如果其他类想拥有记日志功能,那么只需在内部包含一个 Log 类型的变量: public class Log { public void SaveLog( string message) { // save log here. } } public class ProductService { private Log _log; public ProductService() { _log = new Log (); } public void SaveProduct() { // save product here. //... _log.SaveLog( "save 1 product" ); } } 有经验的程序员可能会告诉你,这样做会导致其他类与 Log 耦合。于是,为了解耦,我们将 Log 类的功能抽象出来, ILog 接口就产生了。如此一来,当其他类需要日志功能时,内含变量就从

autofac解析Mvc和Webapi的坑

坚强是说给别人听的谎言 提交于 2020-02-22 12:50:56
  我们在项目中很早就开始使用autofac,也以为知道与mvc和webapi集成的做法。 var builder = new ContainerBuilder(); // Mvc Register builder.RegisterControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired(); builder.RegisterFilterProvider(); builder.RegisterType<UserService>().As<IUserService>().InstancePerLifetimeScope(); //WebApi Register builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).AsSelf().PropertiesAutowired(); builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration); builder.RegisterWebApiModelBinderProvider(); var container = builder.Build(); // Set the dependency

IOC框架之AutoFac简介

喜你入骨 提交于 2020-02-17 19:11:01
一、为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~ Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个: 优点: 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用,例如可以用Lambda表达式注册组件 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们 XML配置支持 自动装配 与Asp.Net MVC 3集成 微软的Orchad开源程序使用的就是Autofac,从该源码可以看出它的方便和强大 既然它都这么牛X了,我们用它就理所当然了,所以推荐其为IOC的终极解决方案! Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高。 官方网站 http://autofac.org/ 源码下载地址 https://github.com/autofac/Autofac 控制反转(IoC/Inverse Of Control): 调用者不再创建被调用者的实例,由autofac框架实现(容器创建)所以称为控制反转。 依赖注入(DI/Dependence injection) :

转 Autofac怎么依赖注入ASP.NET MVC5类的静态方法

[亡魂溺海] 提交于 2020-02-16 10:55:11
之前我有介绍过怎么在ASP.NET mvc 5中实现的Controller的 依赖注入 。一般是通过Contrller的构造函数的参数或者属性来注入,但是这有一个共同点就是调用这个类的方法一般都是实例方法,也就是要实例化这个类才能调用它的方法。但是如果它是一个静态方法我们又该怎么办呢?其实也很简单,下面我们就通过一个写日志的组件来介绍怎么实现ASP.NET MVC5类的静态方法的依赖注入。因为考虑到很多地方都要用到写日志这个方法,而且我们又不想每次调用都需要new一个对象,所以把调用方法封装成一些静态方法。 DependencyRegistrar.cs using Autofac; using Autofac.Integration.Mvc; using Lanhu.Services; using Lanhu.Services.MetionNowOrder; using Lanhu.Services.Member; using System.Web.Mvc; namespace Lanhu.Admin { public class DependencyRegistrar { public static void RegisterDependencies() { var builder = new ContainerBuilder(); builder

autofac文档:实例生命周期

北城以北 提交于 2020-02-14 00:03:36
AutoFac文档 目录 开始 Registering components 控制作用域和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 实例生命周期 实例生命周期决定的在同一个服务的每个请求中实例是如何共享的。 当请求一个服务的时候,Autofac会返回一个单例 (single instance作用域), 一个新的对象 (per lifetime作用域) 或者在某种上下文环境中的单例。比如 一个线程 或者一个HTTP请求 (per lifetime 作用域)。 这条规则适用于显示调用Resolve从容器中检索对象或者容器中为了满足依赖而隐式实现的对象。 更深入的探讨请参考 an Autofac Lifetime Primer. Per Dependency 在其他容器中也称作 瞬态 或者 工厂 ,使用Per Dependency作用域,服务对于每次请求都会返回单独的实例。 在没有指定其他参数的情况下,这是默认是作用域。 builder.RegisterType<X>(); // or builder.RegisterType<X>().InstancePerDependency(); Single Instance 使用Single Instance作用域,所有对父容器或者嵌套容器的请求都会返回同一个实例。