Хост Web Api OWIN с UnityC#

Место общения программистов C#
Ответить
Anonymous
 Хост Web Api OWIN с Unity

Сообщение Anonymous »

Я пытаюсь реализовать UNITY в своем приложении WebApi2.
Проблема в том, что я использую существующий SqlConnection, в зависимости от идентификатора, найденного в URL-адресе ресурса.
Так что мне нужно идентификатор, указанный в URI запроса, для создания моего контекста.
Можно ли получить {dbIdentifier} из URI запроса и проанализировать его в конструкторе MyRepo?
Запрос будет выглядеть так: /api/{dbIdentifier}/{controller}/{id

Структура выглядит так...< /p>

Request POST /api/myDbIdentifier/my/ + PAYLOAD data

Controller:
public class MyController : ApiController
{
private readonly IRepo _repo;

public MyController(IRepo repo)
{
_repo = repo;
}
}

Repo:
public class MyRepo : IRepo
{
private readonly MyContext _context;

public MyRepo(string dbIdentifier)
{
_context = new MyContext(GetConnection(dbIdentifier));
}

public void Insert(string s)
{
//Inserting string in context and save changes
}

private DbConnection(string id)
{
//psudo find connecion from pool, and return instance of DbConnection...
}
}

public interface IRepo
{
void Insert(string s);
}

Context:
public class MyContext : DbContext
{
public MyContext(DbConnection exitingConnection) : base(existingConnection, true)
{ }
}


Кстати, я впервые играю с WebApi и Unity, поэтому, пожалуйста, смиритесь с моим невежеством.

ОБНОВЛЕНО Часть моего кода, посвященная Unity...

UnityResolver (взято из https://learn.microsoft.com/en-us/aspne ... /overview/ расширенный/внедрение зависимостей):

public class UnityResolver : IDependencyResolver
{
protected IUnityContainer Container;

public UnityResolver(IUnityContainer container)
{
if (container == null)
{
throw new ArgumentNullException(nameof(container), "Please provider an IUnityContainer.");
}
Container = container;
}

public void Dispose()
{
Container.Dispose();
}

public object GetService(Type serviceType)
{
try
{
return Container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
}

public IEnumerable GetServices(Type serviceType)
{
try
{
return Container.ResolveAll(serviceType);
}
catch (Exception)
{
return new List();
}
}

public IDependencyScope BeginScope()
{
return new UnityResolver(Container.CreateChildContainer());
}
}


Участие Unity Register в моем стартапе:

public static void Register(HttpConfiguration config)
{
// Configuring DI Container fo IoC (Invert of Control)
var container = new UnityContainer();
container.RegisterType(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
}


Подробнее здесь: https://stackoverflow.com/questions/430 ... with-unity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»