Q:

Why It requires the default constructor instead of using my factory method directly?

Using Visual Studio 2017 I have an ASP.NET Core MVC application. I registered the necessary method of my factory, because in the model each instance of each my class can be created only through the factory:
public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<ITechnicalTask>(_ =>
        // It returns ITechnicalTask instance
        ModelFactory.Current.CreateTechnicalTaskTemplate(
            "Template Name"));

    // Add framework services.
    services.AddMvc();

}

My controller has such methods:
[HttpGet]
public IActionResult CreateTemplate() => View();

[HttpPost]
public IActionResult CreateTemplate(ITechnicalTask item)
{    
    repo.Templates.Add(item);
    return View("TemplatesList");
}

This is my form:
<form asp-action="CreateTemplate" method="post">
    <div class="form-group">
        <label asp-for="TemplateName">Template name:</label>
        <input class="form-control" asp-for="TemplateName" />
    </div>
    <div class="text-center">
        <button class="btn btn-primary" type="submit">
            Accept
        </button>
    </div>
</form>

I get exception when I press Accept button:

An unhandled exception occurred while processing the request.
InvalidOperationException: Could not create an instance of type
  'PikProject.RobotIRA.ITechnicalTask'. Model bound complex types must
  not be abstract or value types and must have a parameterless
  constructor.
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(ModelBindingContext
  bindingContext)

Why It requires the default constructor? Why it is not enough to use my factory method? 
UPD
My business-model is located in other project. All its classes are internal. Only interfaces and couple classes are public. Also it defines the factory interface for creating of necessary instances of the interfaces:
public interface IModelFactory {

    IEmployee CreateEmployee(string name,
        string middleName, string surname,
        string post);

    IAddress CreateAddress(string country, string region,
            string town, string street, string hoseNumber = "",
            string notes = "");

    IApproval CreateApproval(IEmployee employee,
        DateTime? datetime = null);

    IApprovalCollection CreateApprovalCollection();

    IRequirementsCollection CreateRequirementsCollection();

    IRequirement CreateRequirement(RequirementTypes type);

    ITechnicalTask CreateTechnicalTaskTemplate(string name);

    ITechnicalTask CreateTechnicalTaskDocument(
        string templateName);

    ITechnicalTaskCollection CreateTechnicalTaskCollection();

    IRepository CreateRepository();
}

The current factory is always accessible through the ModelFactory.Current property of that assembly. So, no classes or constructors which are accessible in my ASP.NET Core MVC project.

A:

You are confusing dependency injection and model binding. There is a big difference. Consider doing the following instead.
Register IModelFactory as a service:
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IModelFactory>(ModelFactory.Current);

    // Add framework services.
    services.AddMvc();
}

Now in your controller, use FromServices to get the instance and from the post take the value needed to create your model using FromForm:
[HttpPost]
public IActionResult CreateTemplate([FromForm] string name, 
                                    [FromServices] IModelFactory factory)
{
    var item = factory.CreateTechnicalTaskTemplate(name);
    repo.Templates.Add(item);
    return View(nameof(TemplatesList));
}

You're factory should be treated as a service. Model binding expects a POCO, not an interface.

