У вас должен быть проект, который обрабатывает внедрение зависимостей.
Этот проект ссылается на ваш проект домена (где определен IUserBll) и проект, который имеет реализацию DLL. Таким образом, ваш проект MVC будет ссылаться на проект внедрения зависимостей и задан конкретный интерфейс, попросите DI реализовать его.
Взгляните на StructureMap или Замок Виндзор.
//Global.asax
protected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
//Dependency Injection Project:
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
if (controllerType != null)
{
return (IController)ObjectFactory.GetInstance(controllerType);
}
return null;
}
}
Таким образом ваш контроллер может выглядеть так:
public class SomeController
{
private IUserBll _repository;
public SomeController(IUserBll repository)
{
_repository = repository;
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(Someform f)
{
...
_repository.AddUser(...);
}
}
Когда вы используете фабрику контроллеров StructureMap, например, MVC будет получать зависимости в ваш контроллер за кулисами.