Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. <package id="Autofac" version="4.9.2" targetFramework="net471" />
  2. <package id="Autofac.Multitenant" version="4.2.0" targetFramework="net471" />
  3.  
  4. using Autofac;
  5. using Autofac.Multitenant;
  6.  
  7. namespace ConsoleAutoFacTenants
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. var builder = new ContainerBuilder();
  14. builder.RegisterType<GeneralReader>().As<IReader>().InstancePerDependency();
  15. var appContainer = builder.Build();
  16.  
  17. var tenantIdentifier = new AutomationTenantStrategy();
  18. var mtc = new MultitenantContainer(tenantIdentifier, appContainer);
  19.  
  20. mtc.ConfigureTenant("1", b => b.RegisterType<SpecificReader>().As<IReader>().InstancePerDependency());
  21.  
  22. // expected
  23. var reader1 = mtc.Resolve<IReader>();
  24. System.Diagnostics.Debug.Assert(reader1.Name == "General");
  25.  
  26. // unexpected result in debug.assert, assumed that reader2 would resolve type SpecificReader
  27. var childScoped = mtc.Resolve<ILifetimeScope>();
  28. tenantIdentifier.TenantId = "1";
  29. var reader2 = childScoped.Resolve<IReader>();
  30. System.Diagnostics.Debug.Assert(reader2.Name == "Specific");
  31. }
  32. }
  33. internal sealed class AutomationTenantStrategy : ITenantIdentificationStrategy
  34. {
  35. public object TenantId { get; set; }
  36. public bool TryIdentifyTenant(out object tenantId)
  37. {
  38. var activeTenant = this.TenantId;
  39. if (TenantId == null)
  40. {
  41. tenantId = null;
  42. return false;
  43. }
  44. tenantId = activeTenant;
  45. return true;
  46. }
  47. }
  48. public interface IReader
  49. {
  50. string Name { get; }
  51. }
  52. public sealed class GeneralReader : IReader
  53. {
  54. public string Name => "General";
  55. }
  56. public sealed class SpecificReader : IReader
  57. {
  58. public string Name => "Specific";
  59. }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement