问题描述
示例一:我一个接口publicinterfaceITest{stringDisplay();}publicclassTestRepository:ITest{publicstringDisplay(){return"AutoFac"}}publicclassHomeController{privateITesttest=null;publicHomeController(ITest_test){this.test=_test;}}通过Global.asax.cs文件实现依赖注入protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();#regionAutofac注入依赖varbuilder=newContainerBuilder();SetupResolveRules(builder);builder.RegisterControllers(Assembly.GetExecutingAssembly());varcontainer=builder.Build();DependencyResolver.SetResolver(newAutofacDependencyResolver(container));#endregionWebApiConfig.Register(GlobalConfiguration.Configuration);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}privatestaticvoidSetupResolveRules(ContainerBuilderbuilder){builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())//应该问题在这句话上面,但是如果全部在一个csproj里面又是对的,等待大神解决.Where(t=>t.Name.EndsWith("Repository")).AsImplementedInterfaces();}问题如下如果上面的接口是一个类库、实现也是一个类库就出错了,如果所有文件都在同一个csproj里面就没错了,如果分层实现就报错:Noneoftheconstructorsfoundwith'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'ontype'MvcApplication2.Controllers.HomeController'canbeinvokedwiththeavailableservicesandparameters:Cannotresolveparameter'Interface.ITest_test'ofconstructor'Void.ctor(Interface.ITest)'.
解决方案
解决方案二:
通过builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t=>t.Name.EndsWith("Repository")).AsImplementedInterfaces();是为了实现多个类,我现在有可能是TestRepository,后面要添加OpenRepository类哪就只用学业务就够了