Например, если вы хотите изменить com.example.app
на my.awesome.game
, то:
Refactor
Нажмите Rename
. В диалоговом окне «Всплывающее окно» нажмите Rename Package
вместо «Переименовать каталог» Введите новое имя и нажмите «Refactor». Нажмите «Refactor» в нижней части. Разрешите минуту, чтобы Android Studio обновила все изменения. Примечание. При переименовании com
в Android Studio это может привести к предупреждению. В этом случае выберите Переименовать все [/g7]
build.gradle
- обычно app
или mobile
). Обновите applicationId
к новому имени пакета и Sync Gradle, если он еще не был обновлен автоматически: [/g8]
package=
в вашем манифесте. 99% случаев это - один контейнерный экземпляр на приложение. Обычно Вы инициализируете его в Application_Start (для веб-приложения), как это .
После этого, это действительно до потребителя контейнера. Например, некоторые платформы, как Монорельсовая дорога и ASP.NET MVC позволяет Вам прерывать создание экземпляров (контроллеры в этом случае), таким образом, Вы просто регистрируете контроллеры и их зависимости в контейнере и вот именно, каждый раз, когда Вы получаете запрос, контейнер заботится о введении каждого контроллера с его зависимостями. Посмотрите, например этот контроллер MVC ASP.NET . В этих платформах Вы почти никогда не должны называть или даже ссылаться на контейнер в своих классах, который является рекомендуемым использованием.
Другие платформы не позволяют Вам войти в процесс создания легко (как Веб-формы), таким образом, необходимо обратиться к взломам как этот , или получение по запросу необходимые зависимости (то есть, явно назвав контейнер). Для получения по запросу зависимостей используйте статический шлюз для контейнера как этот или тот, описанный maxnk. Обратите внимание путем выполнения этого, фактическое использование контейнера как услуга Локатор который не разъединяет вещи, а также инверсию управления. (см. различие здесь и здесь )
Hope это очищает Ваши сомнения.
Обычно Вы хотите сохранить только один экземпляр в течение времени жизни целого приложения. Что я делаю большую часть времени, я инициализирую контейнер, когда приложение запускается, и затем я использую введенные фабрики для контейнерного не зная получения по запросу объектов.
Другой популярный подход должен обернуть контейнерный экземпляр со статическим классом и использованием что статический класс для доступа к Вашему (одиночный элемент) контейнер. Можно найти пример этого в библиотеке Commons Носорога Ayende здесь . Этот подход однако имеет серьезные недостатки и должен избежаться.
Я использую этот пример из блога Michael Puleio при использовании HttpModule для обработки сборки моих зависимостей с помощью Единицы. http://blogs.msdn.com/mpuleio/archive/2008/07/17/proof-of-concept-a-simple-di-solution-for-asp-net-webforms.aspx
Я использую реализацию этого интерфейса:
public interface IResolver
{
object Resolve(Type type);
object Resolve(string name);
T Resolve<T>() where T : class;
T Resolve<T>(string name) where T : class;
}
, Который на самом деле обертывается в глобальный статический класс, например:
public static class Resolver // : IResolver
{
private static IResolver _current;
public static object Resolve(Type type)
{
return Current.Resolve(type);
}
public static object Resolve(string name)
{
return Current.Resolve(name);
}
public static T Resolve<T>() where T : class
{
return Current.Resolve<T>();
}
public static T Resolve<T>(string name) where T : class
{
return Current.Resolve<T>(name);
}
private static IResolver Current
{
get
{
if (_current == null)
{
_current = new SpringResolver();
}
return _current;
}
}
}
Также я пытаюсь следовать, простое правило - используют класс Преобразователя максимально меньше, вместо этого вводят сервисы в объектах, которым нужны те сервисы.
Поскольку другие ответы здесь указывают, что существует большой выбор, и снова нас оставляют нам выяснить то, что является лучшим в нашем случае.
Тем не менее IMO, наличие глобального контейнера, к которому получают доступ всюду по Вашему приложению несколько, повреждает изоляцию в этом много кода теперь, зависит от одного глобального класса. Кроме того, для приложений, который разделяется в несколько блоков, глобальный контейнер должен быть сделан доступным для всех этих блоков.
С Единицей у Вас может на самом деле быть параметр IUnityContainer в Вашем конструкторе, и контейнер автоматически введется в экземпляр при разрешении класса. Таким образом, для сервисов, который должен разрешить другие сервисы, которые Вы передаете в контейнере вместо того, чтобы вынудить класс сослаться на внешний класс.
Не уверенный, как другие платформы поддерживают этот сценарий (Виндзор введет IKernel
).