public interface IImportModel
public class MaterialImportModel : IImportModel
public string MaterialName { get; set; }
public class CompanyImportModel : IImportModel
public string CompanyName { get; set; }
public interface IImportProcessor<in TModel> where TModel : IImportModel
void Process(TModel model);
public class MaterialImportProccessor : IImportProcessor<MaterialImportModel>
public void Process(MaterialImportModel model)
Console.WriteLine("Material Processed Successfully!Material Name: " + model.MaterialName);
public class CompaniesImportProccessor : IImportProcessor<CompanyImportModel>
public void Process(CompanyImportModel model)
Console.WriteLine("Company Processed Successfully!Company Name: " + model.CompanyName);
public interface IImportProcessorFactory
dynamic Get(Parameter parameter);
public class ImportProcessorFactory : IImportProcessorFactory
public dynamic Get(Parameter parameter)
case Parameter.Materials:
return new MaterialImportProccessor() ;
case Parameter.Companies:
return new CompaniesImportProccessor();
var factory = new ImportProcessorFactory();
var material = factory.Get(Parameter.Materials);
var company = factory.Get(Parameter.Companies);
var model = new MaterialImportModel();
model.MaterialName = "My Material";
var cModel = new CompanyImportModel();
cModel.CompanyName = "My Company";
public static void Main()
var program = new Program();
Console.WriteLine("Hello World");