У меня есть интерфейс, и я хочу сделать шаблон фабрики, чтобы создать экземпляр другого конструктора интерфейса. Но я хочу кинуть детали того, какой конструктор должен быть создан в файле конфигурации. Я хотел бы иметь его в форме конфигурации RoleProvider:.NET Конфигурируемая реализация интерфейса
<section name="MembershipProvider" type="MyOwn.UserManagement.Providers.MembershipProvider.CustomMembershipProviderConfigurationSection,MyOwn.UserManagement.Providers.MembershipProvider" allowDefinition="MachineToApplication" />
Так что это своего рода метод инъекции зависимостей. Может кто-нибудь мне помочь?
Edit:
Реальная ситуация такова:
У меня есть интерфейс IDataExchange
и хотите реализовать его с различными сборками для различных клиентов. Поэтому у меня могут быть две сборки, которые имеют классы, реализующие IDataExchange
, скажем, DataExchange1
и DataExchange2
. Теперь, когда я развертываю, в зависимости от того, какой клиент я ему предоставляю, я хотел бы установить детали сборки (либо DataExchange1
, либо DataExchange2
) в файле конфигурации. Это также позволит мне или любому разработчику создавать новые сборки, реализующие IDataExchange
для любых необходимых изменений, если решение по созданию экземпляра обрабатывается автоматически.
Так как я могу это сделать?
Моя реализация:
Благодаря всем вам. И особое спасибо @Pauli Østerø
Я принял ответ из ваших ответов и внедрил решение.
В файле конфигурации я добавил следующее:
<add key="Exchanger" value="DExchanger.DExchange1, DExchanger.DExchange1"/>
Я добавил класс (для работы в качестве DI контейнера или абстрактной фабрики). Класс DIContainer
, содержащий следующий метод:
public IDataExchange CreateInstance(string config)
{
var type = Type.GetType(config);
return (IDataExchange)Activator.CreateInstance(type);
}
И пока я инстанцировании, я пишу следующее:
var config = ConfigurationManager.AppSettings.Get("Exchanger");
DIContainer x = new DIContainer();
var instance = x.CreateInstance(config);
Console.Write("Provide your input please: ");
string inp=Console.ReadLine();
Console.WriteLine(instance.DoDataExchange(inp));
Console.ReadLine();
И это дает мне результат, который я искал.
Я попрошу всех вас высказать свое мнение для дальнейшего совершенствования.
что вы точно просят? теперь вы определили раздел и тип для его обработки. в зависимости от того, в какой группе определяется ваш раздел, вам нужно будет добавить фактические данные конфигурации ниже в вашем файле конфигурации. –
@Pauli Østerø: Отредактировано мое сообщение, чтобы уточнить, что я хотел знать. – Kangkan
@Pauli Østerø: Является ли моя реализация чем-то близким к DI? – Kangkan