我们有一个使用autofac的网站解决方案。现在我们希望在Windows服务/控制台应用程序中重复使用某些内容,但这些内容只在从企业总线接收到消息时才可用。
我有以下服务需要重复使用:
public SettingsService : ISettingsService {
public readonly ITenantIdentifer _tenantIdentifier
public SettingsService (ITenantIdentifier tenantIdentifier) {
this._tenantIdentifier =tenantIdentifier;
}
// do other stuff
}
当前的工作设置
对于WebContext,ITenantIdentifier
仅使用builder.RegisterType<WebTenantIdentifier>().As<ITenantIdentifier>();
在WebApplication中注册。一切正常。
我们的企业总线
企业总线无法解析ITenantIdentifier
,直到消息可用。因此,我们创建了一个MessageTenantIdentifier
并注册了一个工厂。
public class MessageTenantIdentifier : ITenantIdentifier
{
public delegate MessageTenantIdentifier Factory(int tenantId);
public MessageTenantIdentifier(int tenantId, IOtherDependency stuff)
{
_tenantId = tenantId;
// ...
}
}
// somewhere else the this is registered
builder.RegisterType<MessageTenantIdentifier >().As<ITenantIdentifier>().AsSelf();
builder.RegisterGeneratedFactory<MessageTenantIdentifier.Factory>();
问题 工厂只能在处理消息时使用。
public class MsgTypeHandler : IHandleMessages<MsgType>
{
public MsgTypeHandler(ISettingsService settingsService, MessageTenantIdentifier factory) { ...}
public async Task Handle(MsgType message)
{
var tenantId = message.TenantId;
// THIS IS THE MOMENT I CAN CONFIGURE THE MessageTenantIdentifier
var tenantIdentifier = factory.Invoke(tenantId);
// but this factory is not used against the ISettingsService. The service to be reused. <== THE REAL PROBLEM
}
}
问题:
那么,我该如何解决这个问题?例如,我应该如何设置服务总线中MessageTenantIdentifier的注册? 还是我的依赖项设置有问题?