Я использую Unity для создания классов с помощью инжектора конструктора, например:
public class ProductsController : BaseController
{
public ProductsController(
IService<Account> accountService,
IService<Product> productService)
{
_account = accountService;
_product = productService;
}
Загрузчик:
private static IUnityContainer BuildUnityContainer()
{
CloudStorageAccount storageAccount;
storageAccount = CloudStorageAccount.FromConfigurationSetting("DEV_DataConnectionString");
var container = new UnityContainer();
container.RegisterType< IService<Account>, AccountService >();
container.RegisterType< IService<Product>, ProductService >();
container.RegisterType<IAzureTable<Product>, AzureTable<Product>>(new InjectionConstructor(storageAccount, "TestProducts"));
return container;
}
Теперь мне нужно создать экземпляр экземпляра службы "на лету" из моего метода. Примерно так:
public void Update(string serviceClassName) {
var serviceClass = new container.Resolve<IService<Product>>();
Но есть некоторые вещи, которые я не понимаю.
- Прежде всего мне нужно создать новый контейнер? Я предполагаю, что мне нужно сослаться на контейнер, который я уже создал, но я не могу найти ссылку, как это сделать.
- Во-вторых, здесь у меня есть жестко закодированный продукт, но мне нужно иметь возможность передать слово «продукт» в качестве параметра и затем создать его.
Как я могу создать свой класс?
Обновление
Пока не тестировалось, но я считаю, что решение для именования моего класса может потребовать, чтобы я зарегистрировал свой класс следующим образом:
container.RegisterType< IService<Product>, ProductService >("productService");