我有一个DelegatingHandler我需要注册的类库中的自定义Autofac.webapi主机解析它对运行时的依赖性,因此主机没有对此库的引用.
public class LocalizationHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken )
{}
}
Run Code Online (Sandbox Code Playgroud)
在我的Autofac初始化程序类中,我尝试过以下方法:
protected override void Load( ContainerBuilder builder )
{
builder.RegisterType<LocalizationHandler>();
builder.Register(c => new LocalizationHandler());
}
Run Code Online (Sandbox Code Playgroud)
在主机中注册此类处理程序的常规方法是:
public static void Register(HttpConfiguration httpConfiguration)
{
httpConfiguration.MapHttpAttributeRoutes();
httpConfiguration.MessageHandlers.Add(new LocalizationHandler());
}
Run Code Online (Sandbox Code Playgroud)
但是我没有访问这里的主机项目.任何想法如何注入处理程序ContainerBuilder?
我正在编写RESTful Web服务状态页面的代码.我想知道是否有将IIS的当前请求转移到C#中.
我正在使用IIS 7.0,我想要的信息
IIS>工作程序> ASP.NET v4.0 >请求

我收到以下错误消息:
System.InvalidOperationException:尝试创建"App.Web.Controllers.ContractWizardController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.---> Autofac.Core.DependencyResolutionException:可以使用可用的服务和参数调用在'App.Web.Controllers.ContractWizardController'类型上找到'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'的构造函数:无法解析构造函数'Void .ctor(App.Service.IWizardTypeStepService,App.Service.IAppBrandService,App.Service.IAppInstitutionService)'的参数'App.Service.IWizardTypeStepService wizardTypeStepService'.
at autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context,IEnumerable1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable1参数)at Autofac.Core.Resolving.InstanceLookup.Execute()
at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope,IComponentRegistration registration,IEnumerable)1 parameters) at Autofac.Core.Resolving.ResolveOperation.ResolveComponent(IComponentRegistration registration, IEnumerable1个参数)Autofac.Resolution.ResolveOperation.Execute(IComponentRegistration注册,IEnumerable1 parameters) at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration registration, IEnumerable1参数)在Autofac.ResolutionExtensions.TryResolveService(IComponentContext上下文,服务服务,IEnumerable1 parameters, Object& instance) at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable1参数)在Autofac.ResolutionExtensions.ResolveOptional(IComponentContext上下文,类型serviceType) System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(RequestContext requestContext,Type)中的Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(类型serviceType)上的Autofac.ResolutionExtensions.ResolveOptional(IComponentContext context,Type serviceType),IEnumerable`1参数) controlle rType)---在System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,Type controllerType)的System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(RequestContext requestContext,Type controllerType)的内部异常堆栈跟踪结束在System.Web.Mvc.DefaultControllerFactory.CreateController(的RequestContext的RequestContext,字符串controllerName)在System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase HttpContext的,一个IController&控制器,IControllerFactory&工厂)
在System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase HttpContext的System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context,AsyncCallback cb,System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,AsyncCallback callback,Object state)中的AsyncCallback回调,Object状态) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep中的Object extraData)System.Web.HttpApplication.ExecuteStep中的.Execute()(IExecutionStep step,Boolean&completedSynchronously)
Global.asax中
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); …Run Code Online (Sandbox Code Playgroud) 在Parameterized Instantiation( Func<X, Y, B>)文档中,最后一句话说
但是,如果您将一个对象注册为 SingleInstance() 并多次调用 Func 来解析该对象,则无论您传入的参数不同,每次都会获得相同的对象实例。 仅传递不同的参数不会破坏尊重对于生命周期范围。
它如何工作具有不同参数构造函数的单例类。
我有一个基础架构单例,我想解决autofac
在容器创建时,我注册AppPaths为单身人士
但是,由于各种原因(测试,一些基础设施的东西),我希望能够在运行时将该实例与新实例交换出来.让我们说一个派生类型class AppPaths2 : AppPaths.
我找不到这样做的API.
我可以使用CommentServiceLocator来获取实例IComponentContext但我没有看到从那里解决东西的方法.
我几乎找一个端口Autofac被实施这里有温莎城堡.这IBus是EasyNetQ库提供的接口,我想注册一个将IBus实例实例化为单例的工厂.BusBuilder.CreateMessageBus是工厂方法.Castle Windsor的例子:
container.Register(
Component.For<IBus>()
.UsingFactoryMethod(BusBuilder.CreateMessageBus)
.LifestyleSingleton()
);
Run Code Online (Sandbox Code Playgroud) 我在温莎城堡注册了这个.什么是AutoFac中的替代代码?
//Transient
context.IocManager.IocContainer.Register(
Classes.FromAssembly(context.Assembly)
.IncludeNonPublicTypes()
.BasedOn<ITransientDependency>()
.WithService.Self()
.WithService.DefaultInterfaces()
.LifestyleTransient()
);
Run Code Online (Sandbox Code Playgroud) 我在autofac中写下以下寄存器类型:
builder.RegisterType<NoteBookContext>()
.As<DbContext>()
.WithParameter(ResolvedParameter.ForNamed<DbContext>("connectionstring"));
Run Code Online (Sandbox Code Playgroud)
实际上,我编写了这个代码,用于使用connectionstring参数注入NoteBookContext.(即:new NoteBookContext(string connectionstring))
现在,我怎样才能在运行时传递参数值?
我有以下json输出字符串:
{
"meta": {
"limit": 20,
"next": null,
"offset": 0,
"previous": null,
"total_count": 1
},
"objects": [{
"bcontext": "/api/v2.0/buildercontext/2/",
"bugs": [],
"build": {
"bldtype": "obj",
"branch": "main",
"buildstatus": [{
"build": "/api/v2.0/build/2140634/",
"failurereason": "_checkfailures (seen: FAIL - /testrun/18647678/ - area[4769] AIM-SANITY)",
"id": "1294397",
"lastupdate": "2015-03-31T14:30:18",
"overridden": false,
"overridedesc": "",
"overrideuser": null,
"recommended": false,
"resource_uri": "/api/v2.0/buildstatus/1294397/",
"slatype": {
"id": "26",
"name": "VA_Bats",
"resource_uri": "/api/v2.0/sla/26/"
}
}],
"changeset": "494625",
"coverage": false,
"deliverables": ["/api/v2.0/deliverable/4296455/", "/api/v2.0/deliverable/4296956/", "/api/v2.0/deliverable/4296959/", "/api/v2.0/deliverable/4296986/", "/api/v2.0/deliverable/4296992/", "/api/v2.0/deliverable/4296995/", "/api/v2.0/deliverable/4297034/", "/api/v2.0/deliverable/4297058/"],
"git_host": null,
"git_repo": …Run Code Online (Sandbox Code Playgroud) 我们有一些遗留应用程序假设我们无法更改该 SiteSettings 类,因为完整的项目编码数千行会干扰。所以我们想用 DI 解决问题。我在这里创建了 POC 应用程序,您可以在global asax评论中 看到//HOW CAN I PASS TenantId HERE so it will be same for this complete httprequest life.
遗留代码:
public class OrderController
{
public static string CompleteOrder()
{
return SiteSettings.Instance.DefaultTimeZone();
}
}
public class SiteSettings
{
public ITenantSettings TenantSettings { get; set; }
private static SiteSettings _instance;
private SiteSettings() { }
public static SiteSettings Instance => _instance ?? (_instance = new SiteSettings());
public string DefaultTimeZone()
{
return TenantSettings.DefaultTimeZone();
}
}
Run Code Online (Sandbox Code Playgroud)
新的注射类 …
我在Web API 2项目中使用ASP.NET Identity 2.2,但我不确定如何连接使用Autofac的ISecureDataFormat<AuthenticationTicket>依赖项.AccountController
我试过这个:
builder.RegisterType<ISecureDataFormat<AuthenticationTicket>>()
.As<TicketDataFo??rmat>();
Run Code Online (Sandbox Code Playgroud)
并得到错误:
类型'Microsoft.Owin.Security.ISecureDataFormat`1 [Microsoft.Owin.Security.Authenticat ionTicket]'不能分配给服务'Microsoft.Owin.Security.DataHandler.TicketDataFormat'
我遇到的所有问题似乎都没有使用最新的ASP.NET身份稳定版本.
任何帮助是极大的赞赏.
asp.net dependency-injection autofac asp.net-web-api2 asp.net-identity-2
只是学习Autofac并努力按照惯例重新命名几个命名实例。
public interface IFoo
{
string AutoFactName{ get; }
object DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
看着这个界面,我想要完成的是沿着这些思路
builder.RegisterTypes()
.AssignableTo<IFoo>()
.As<IFoo>()
.Named<IFoo>(i => i.AutoFactName);
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些实现这种效果的方法。最终目标是动态注册和解析实例。
c# ×11
autofac ×10
asp.net ×1
easynetq ×1
iis ×1
iis-7 ×1
powershell ×1
registration ×1
request ×1
sql ×1
sql-server ×1
webforms ×1
worker ×1