【发布时间】:2018-09-07 06:08:37
【问题描述】:
我正在将一个大型代码库从 Ninject 迁移到 Autofac,并且正在努力处理其中一个绑定(根据我的一些调试,我认为这会导致激活错误)。
忍者:
Bind<ISecureDataFormat<AuthenticationTicket>>()
.ToMethod(context =>
{
var owinContext = context.Kernel.Get<IOwinContext>();
return owinContext
.Get<ISecureDataFormat<AuthenticationTicket>>("SecureDataFormat");
});
Autofac(我有什么):
builder.Register(
context => context.Resolve<IOwinContext>()
.Get<ISecureDataFormat<AuthenticationTicket>>("SecureDataFormat"))
.As<ISecureDataFormat<AuthenticationTicket>>();
Startup.cs:
var container = RegisterIoC(app, config);
public IContainer RegisterIoC(IAppBuilder app, HttpConfiguration config)
{
var builder = new ContainerBuilder();
builder = RegisterDependencies(builder);
builder = RegisterFilters(builder, config);
/*builder.RegisterModule<DebuggingRequestModule>();*/
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
app.UseAutofacMiddleware(container);
app.UseAutofacMvc();
app.UseAutofacWebApi(config);
app.UseWebApi(config);
return container;
}
更多:
builder.RegisterModule<ApiDependencyModule>().RegisterModule<AutofacWebTypesModule>();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(typeof(AccountController).Assembly);
(看似)关联的构造函数:
AccountController.cs:
public AccountController(ILoginService loginService,
IBearerTokenStore tokenStore,
IRememberMeCookieService rememberMeCookieService,
IInternalSsoChallenge ssoChallenge)
{
}
LoginService.cs:
public LoginService(IBearerTokenStore tokenStore,
IGrantTypeProvider grantProvider,
IRememberMeCookieService rememberMeCookieService)
{
}
BearerTokenCookieStore.cs:
public BearerTokenCookieStore(IOwinContext owinContext, ISecureDataFormat<AuthenticationTicket> secureDataFormat, IAppSettingsReader appSettingsReader, ICookieService cookieService)
{
}
我有一个正在帮助我调试的日志记录模块,这是我拥有的消息列表
Resolving _______.Login.Controllers.AccountController
--Resolving _______.ApiGateway.Services.Auth.LoginService
----Resolving _______.ApiGateway.Security.OAuth.BearerTokenCookieStore
------Resolving Microsoft.Owin.Security.DataHandler.SecureDataFormat`1[Microsoft.Owin.Security.AuthenticationTicket]
Exception thrown: 'Autofac.Core.DependencyResolutionException' in Autofac.dll
Exception thrown: 'Autofac.Core.DependencyResolutionException' in Autofac.dll
Exception thrown: 'Autofac.Core.DependencyResolutionException' in Autofac.dll
The thread 0x1014 has exited with code 0 (0x0).
编辑:
我看到的异常:
An error occurred during the activation of a particular registration.
See the inner exception for details. Registration:
Activator = AccountController (DelegateActivator),
Services = [____.Login.Controllers.AccountController],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = None,
Ownership = ExternallyOwned --->
An error occurred during the activation of a particular registration.
See the inner exception for details.
Registration:
Activator = AccountController (ReflectionActivator),
Services = [____.Login.Controllers.AccountController],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = None, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration.
See the inner exception for details.
Registration:
Activator = LoginService (DelegateActivator),
Services = [____.ApiGateway.Services.Auth.ILoginService],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = None,
Ownership = ExternallyOwned ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = LoginService (ReflectionActivator),
Services = [____.ApiGateway.Services.Auth.ILoginService],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = None,
Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = BearerTokenCookieStore (DelegateActivator),
Services = [____.ApiGateway.Security.OAuth.IBearerTokenStore],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = None,
Ownership = ExternallyOwned ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = BearerTokenCookieStore (ReflectionActivator),
Services = [____.ApiGateway.Security.OAuth.IBearerTokenStore],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = Shared,
Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = ISecureDataFormat`1 (DelegateActivator),
Services = [Microsoft.Owin.Security.ISecureDataFormat`1[[Microsoft.Owin.Security.AuthenticationTicket,
Microsoft.Owin.Security,
Version=3.0.1.0,
Culture=neutral,
PublicKeyToken=31bf3856ad364e35]]],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = None,
Ownership = ExternallyOwned ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = ISecureDataFormat`1 (DelegateActivator),
Services = [Microsoft.Owin.Security.ISecureDataFormat`1[[Microsoft.Owin.Security.AuthenticationTicket,
Microsoft.Owin.Security,
Version=3.0.1.0,
Culture=neutral,
PublicKeyToken=31bf3856ad364e35]]],
Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime,
Sharing = None,
Ownership = OwnedByLifetimeScope ---> A delegate registered to create instances of 'Microsoft.Owin.Security.ISecureDataFormat`1[Microsoft.Owin.Security.AuthenticationTicket]' returned null. (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.)
最里面:
A delegate registered to create instances of 'Microsoft.Owin.Security.ISecureDataFormat`1[Microsoft.Owin.Security.AuthenticationTicket]' returned null.
【问题讨论】:
-
我确实包括了这个,包括过去可以工作的 ninject 设置和问题中失败的 autofac 设置。
-
你能添加你的创业公司吗?你在使用autofac吗?你添加
app.UseAutofac(container)了吗? -
@Mutmatt - 你是否也可以包含你的 packages.xml (只包含 owin/webapi/mvc/autofac 依赖项就足够了)。启动时看起来很奇怪的事情是将类似 MVC4 的引导程序与新的引导程序混合在一起。
-
我们没有 packages.xml 文件....
-
老实说,我应该在我还拥有代码库的时候回答这个问题。我必须找到仍然在我以前的雇主工作的人才能找到我最终得到的解决方案。我相信我改变了注射的结构
标签: c# owin inversion-of-control ninject autofac