Если кто-то еще заинтересован в будущем, я решил это, используя дженерики. Например:
public interface IStaticMember<TOwner, TValue>
where TOwner : class
where TValue : class
{
public TValue Value { get; }
}
Реализация:
public class StaticMember<TOwner, TValue> : IStaticMember<TOwner, TValue>
where TOwner : class
where TValue : class
{
public StaticMember(TValue value)
{
Value = value;
}
public TValue Value { get; private set; }
}
Методы регистрации ...
public static IServiceCollection AddStaticMember<TOwner, TValue>(
this IServiceCollection @this)
where TOwner : class
where TValue : class
{
return @this.AddSingleton<IStaticMember<TOwner, TValue>, StaticMember<TOwner, TValue>>();
}
public static IServiceCollection AddStaticMember<TOwner, TValue>(
this IServiceCollection @this,
Func<IServiceProvider, TValue> valueFactory)
where TOwner : class
where TValue : class
{
return @this.AddSingleton<IStaticMember<TOwner, TValue>>(serviceProvider =>
{
return new StaticMember<TOwner, TValue>(valueFactory(serviceProvider));
});
}
Классы, которые его используют ...
public class OwningClass1 : IOwningClass1
{
public OwningClass1(IStaticMember<IOwningClass1, IMyStatic> myStatic) { ... }
}
public class OwningClass2 : IOwningClass2
{
public OwningClass2(IStaticMember<IOwningClass2, IMyStatic> myStatic) { ... }
}
И введение stati c в переходный процесс (двумя способами) ...
services.AddTransient<IOwningClass1, OwningClass1>();
services.AddTransient<IOwningClass2, OwningClass2>();
services.AddTransient<IMyStatic, MyStatic>();
services.AddStaticMember<IOwningClass1, IMyStatic>();
services.AddStaticMember<IOwningClass2, IMyStatic>();
// or
services.AddTransient<IOwningClass1, OwningClass1>();
services.AddTransient<IOwningClass2, OwningClass2>();
services.AddStaticMember<IOwningClass1, IMyStatic>(serviceCollection => new MyStatic());
services.AddStaticMember<IOwningClass2, IMyStatic>(serviceCollection => new MyStatic());
В обоих случаях все экземпляры OwningClass1 получают один и тот же экземпляр, а все экземпляры OwningClass2 получают другой отдельный экземпляр.
Пожалуйста, дайте мне знать, если есть лучший способ.